如何告诉cxf在方法中保留包装类型?

Mou*_*una 5 java serialization wsdl cxf jaxb

在我的WSDL中,我有一个操作

<wsdl:operation name="theMethod">
    <wsdl:input message="input1" name="input1"></wsdl:input>
    <wsdl:output message="tns:classNumber1" name="classNumber1"></wsdl:output>
</wsdl:operation>
Run Code Online (Sandbox Code Playgroud)

在我的xsd中,classNumber1是一个复杂的类型,它是另一种类型的包装:classNumber2

<xs:complexType name="classNumber1">
  <xs:sequence>
   <xs:element minOccurs="0" name="arg0" type="tns:classNumber2"/>
  </xs:sequence>
</xs:complexType>
Run Code Online (Sandbox Code Playgroud)

当我使用cxf生成类(我使用cxf maven插件)时,我希望theMethod返回一个ClassNumber1但它是一个ClassNumber2.

@WebMethod
@ResponseWrapper(localName="classNumber1" , className="com.model.ClassNumber")
public ClassNumber2 theMethod (Input1 input1){
    ...
}
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉cxf使用包装器CLassNumber1生成方法.谢谢.

Mou*_*una 5

我在此文档中找到了解决方案,问题“如何将生成的 Web 服务方法调用从包装样式切换为非包装样式(或反之亦然)?

使用 cxf 生成保留包装器的解决方案是在 pom.xml 中添加一个绑定文件

<defaultOptions>
<bindingFiles>
    <bindingFile>${basedir}/src/main/resources/bindings.xjb</bindingFile>
</bindingFiles>
<noAddressBinding>true</noAddressBinding>
</defaultOptions>
Run Code Online (Sandbox Code Playgroud)

在绑定文件中,您将enableWrapperStyle设置为 false:

<jaxws:bindings
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns="http://java.sun.com/xml/ns/jaxws"
    xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
    <enableWrapperStyle>false</enableWrapperStyle>
</jaxws:bindings>
Run Code Online (Sandbox Code Playgroud)