Java SOAP"wsimport" - 从document/literal包装的WSDL强制包装绑定?

mae*_*ics 15 java soap wsdl jax-ws wsimport

Java 6 JAX-WS"wsimport"实用程序在给定WSDL文件的情况下生成Web服务框架(接口)方面做得很好,但有一个个人烦人的异常.

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

有可能告诉"wsimport"将SOAP绑定参数保持为"wrapped"而不是"bare"吗?

ben*_*y23 38

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>
Run Code Online (Sandbox Code Playgroud)

然后调用wsimport

$ wsimport -b binding.xml OperationService.wsdl
Run Code Online (Sandbox Code Playgroud)

  • +110感谢您指出我正确的方向! (2认同)

mae*_*ics 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>
Run Code Online (Sandbox Code Playgroud)