JAXB - 更改包 - 使用嵌入JAXB绑定声明但不包含外部文件

时间:2012-12-14 16:15:15

标签: java binding xsd jaxb wsdl

我想更改架构中所有类的包名称。不幸的是我不能使用jaxws-maven-plugin的元素,因为我有一个WSDL和更多的模式。

<definitions ...>
  <types>
    <s:schema ...>
    </s:schema ...>
    <s:schema ...>
    </s:schema ...>
...

我决定使用JAXB绑定文件,但我不能用它修改包名。这是我的绑定文件:

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

<!--jaxws:bindings wsdlLocation="MYWSDL">
    <jaxb:bindings node="wsdl:definitions/wsdl:types/xs:schema/xs:element[@name='reserveAppointment']">
        <jaxb:package name="WWWWWWW"/>
    </jaxws:bindings>

</jaxws:bindings-->


<jaxws:bindings wsdlLocation="MYWSDL" node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://www.openuri.org/']">
    <jaxb:package name="WWWWWWW"/>
</jaxws:bindings>


<!--jaxws:bindings wsdlLocation="MYWSDL">
    <jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://www.openuri.org/']">
        <jaxws:bindings node="//xs:element[@name='reserveAppointment']">
            <jaxb:package name="aaaaa"/>
            <jaxb:class name="WWWWWWWW"/>
        </jaxws:bindings>
    </jaxws:bindings>
</jaxws:bindings-->


</jaxb:bindings>

我正在尝试更多绑定,但我无法做到这一点。我也试图改变一个元素的包名。 这是我的WSDL:

<definitions ...>
<types>
<s:schema ...>
  <s:import namespace="XXX1"/>
  <s:element name="reserveAppointment">

如何使用JAXB绑定修改包名?

令我感到意外的是,我可以通过嵌入JAXB绑定声明来更改包名称。

<s:schema .... xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0">
    <s:annotation>
        <s:appinfo>
            <jaxb:schemaBindings>
                <jaxb:package name="wwwwwwwwwww"/>
            </jaxb:schemaBindings>
        </s:appinfo>
    </s:annotation>
    <s:import namespace="http://www.bt.com/eai/hub/or/GenericCPWSHubService"/>
    <s:element name="reserveAppointment">
...

但是我不想更改第三方服务的WSDL,因为我不太清楚如果我想要调用它会导致什么。这个annotation / appinfo元素会改变WSDL吗?这只是对JAXB编译器的一个提示? 谢谢!

0 个答案:

没有答案