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

标签 java serialization jaxb wsdl cxf

在我的 WSDL 中我有一个操作

<wsdl:operation name="theMethod">
    <wsdl:input message="input1" name="input1"></wsdl:input>
    <wsdl:output message="tns:classNumber1" name="classNumber1"></wsdl:output>
</wsdl:operation>

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

<xs:complexType name="classNumber1">
  <xs:sequence>
   <xs:element minOccurs="0" name="arg0" type="tns:classNumber2"/>
  </xs:sequence>
</xs:complexType>

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

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

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

最佳答案

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

通过生成 cxf 保留包装器的解决方案是在 pom.xml 中添加一个绑定(bind)文件:

<defaultOptions>
<bindingFiles>
    <bindingFile>${basedir}/src/main/resources/bindings.xjb</bindingFile>
</bindingFiles>
<noAddressBinding>true</noAddressBinding>
</defaultOptions>

在绑定(bind)文件中,您将 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>

关于java - 如何告诉 cxf 将包装器类型保留在方法中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23270996/

相关文章:

c# - 不从文件反序列化

java - 让Gson按照一定的顺序序列化Set

xml - cvc-complex-type.2.4.a : invalid content was found starting with element 'ProcessDesc' . ProcessName 预期之一

jaxb - 无法创建 DynamicJAXBContext - 从 GML 模式引导时出现问题

java - 以随机顺序显示对

html - Java:通过 eclipse 生成的 jar 文件无法运行。可能是什么问题?

java - 从 javascript 调用时,已签名的小程序给出 AccessControlException : access denied,

java - 如何获取数据源?

java - 是否有可能在运行时获取java类的serialVersionUID

java - 从 wsdl 生成 java 类