结合JAXWS和JAXB绑定

时间:2017-10-25 07:59:49

标签: jaxb jax-ws jaxb2 maven-jaxb2-plugin jax-ws-customization

我使用jaxws-maven-plugin自定义由WSDL文件生成的JAXB bean。要自定义它们我使用绑定文件。

基本上我想要:

  • 防止生成JAXBElement
  • 自定义一些元素名称

我的绑定文件是:

<jaxws:bindings version="2.1"
           xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
           xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
           xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
           xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">

<!--Element 1-->
<jaxb:globalBindings generateElementProperty="false">
    <xjc:simple/>
</jaxb:globalBindings>

 <!--Element 2-->
<jaxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema" node="//xs:complexType[@name='WorkDocuments']/xs:choice">
    <jaxb:property name="documents"/>
</jaxb:bindings>

问题在于,如果我使用jaxws:bindings作为根元素,则元素1 不起作用并且生成JAXBElement

如果我使用jaxb:bindings作为根元素,那么元素1 可以正常工作,但元素2 不会因为xpath表达式不适用匹配任何元素。

如何更正绑定文件以使两个元素同时工作?

1 个答案:

答案 0 :(得分:0)

我找到了一个使用<jaxws:bindings>作为根元素的解决方案,然后将globalBindings放在jaxws:bindings中:

那是:

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

<jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='yourNamespace']">
    <jaxb:globalBindings generateElementProperty="false">
    </jaxb:globalBindings>       
</jaxws:bindings>