Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改生成的jaxb类的包_Java_Jaxb_Jax Ws_Cxf_Wsdl2java - Fatal编程技术网

Java 更改生成的jaxb类的包

Java 更改生成的jaxb类的包,java,jaxb,jax-ws,cxf,wsdl2java,Java,Jaxb,Jax Ws,Cxf,Wsdl2java,我在wsdl中定义了以下数据类型: <?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions name="myService" targetNamespace="http://example.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://example.com" xmlns:xsd="http://www.w3.org/2001/X

我在wsdl中定义了以下数据类型:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="myService" targetNamespace="http://example.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://example.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
    <wsdl:types>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="example.com" targetNamespace="example.com" version="1.0">
            <xs:simpleType name="MyEnum">
                <xs:restriction base="xs:string">
                    <xs:enumeration value="one"/>
                    <xs:enumeration value="two"/>
                </xs:restriction>
            </xs:simpleType>
            <!-- SNIP other data types -->
        </xs:schema>
    </wsdl:types>
</wsdl:definitions>

我想让MyEnum进入它自己的包。因此,我使用了一个jaxws绑定文件,并使用XPATH遍历模式和jaxb绑定来设置包,如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxws:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://java.sun.com/xml/ns/jaxws">
    <jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='example.com']">
      <jxb:schemaBindings>
          <jxb:package name="abra.ca.dabra" /> <!-- this works, and changes package of all classes in the namespace-->
      </jxb:schemaBindings>
      <jxb:bindings node="//xs:simpleType[@name='MyEnum']">
          <jxb:package name="a.b.c"/> <!-- this does not work -->
      </jxb:bindings>
    </jaxws:bindings>
    <!-- SNIP - other functional jaxws bindings -->
</jaxws:bindings>

现在,schemaBindings中设置的路径接受并将来自该schema/targetnamespace的所有数据类型放入包abra.ca.dabra中。然而,我似乎无法设置MyEnum的包-这正是我想要的


我使用cxf的wsdl2java提供绑定文件。我遗漏了什么吗?

您是否尝试在WSDL中添加第二个仅包含MyEnum的模式,并使用不同的名称空间?然后,原始模式定义应该从新名称空间导入该类型。

我会尝试使用以下内容:

<jaxws:bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">

<jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>

<!-- set default package structure -->
<jaxws:package name="abra.ca.dabra" />

<!-- set package structure for complex schema types -->
<jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema/xs:simpleType[@name='MyEnum']">
    <jaxb:schemaBindings>
        <jaxb:package name="a.b.c" />
    </jaxb:schemaBindings>
</jaxws:bindings>

假的

更准确地说,您应该使整个wsdl可用


希望这有助于

我遇到了同样的问题。您解决了您的问题吗?绑定文件不正确:命名空间前缀“jaxws”未绑定到任何命名空间。类似的,前缀“xs”未绑定。根据wsdl2java(Apache CXF 2.6.1)的输出,您无法将“类型”指定为绑定节点。它必须是一个“模式”。这就是为什么您的“abra.ca.dabra”示例有效,而“MyEnum”失败的原因。因此,问题与“枚举”类型无关。其他类型的节点也会出现故障。