15

Java 6 JAX-WS “wsimport” 实用程序在生成一个给定 WSDL 文件的 Web 服务框架(接口)方面做得很好,但有一个令人讨厌的异常。

当给定一个使用SOAP 文档/文字包装样式的 WSDL (也在此处描述)时,它会生成一个具有“裸” SOAP 绑定参数样式的服务接口(在方法签名中将多个参数和返回值扩展为“持有者”对象)而不是 WSDL 指定的简单包装参数和返回值。其他工具,例如 Axis2 wsdl2java 只是使用包装器元素作为输入参数和返回值,而不是自动“解包”它们。

是否可以告诉“wsimport”将 SOAP 绑定参数保持为“包装”而不是“裸”?

4

2 回答 2

39

AFAIK,您需要指定一个自定义绑定文件来禁用包装样式:

<bindings
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    wsdlLocation="OperationService.wsdl"
    xmlns="http://java.sun.com/xml/ns/jaxws">
        <!-- Disable default wrapper style -->
        <enableWrapperStyle>false</enableWrapperStyle>
</bindings>

然后调用 wsimport

$ wsimport -b binding.xml OperationService.wsdl
于 2011-08-15T00:36:39.260 回答
15

@beny23 的答案是正确的;然而,事实证明,您可以将 JAX-WS 绑定指令嵌入到 WSDL 文件本身中,这样就无需在“ ”命令中添加“ -b binding.xml”开关:wsimport

<wsdl:portType name="HelloPortType">
  <jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
    <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
  </jaxws:bindings>
  <wsdl:operation name="sayHello">...</wsdl:operation>
</wsdl:portType>
于 2011-08-16T00:43:38.840 回答