【问题标题】:Java SOAP "wsimport" - force wrapped binding from document/literal wrapped WSDL?Java SOAP“wsimport” - 从文档/文字包装的 WSDL 强制包装绑定?
【发布时间】:2011-10-25 07:59:11
【问题描述】:

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

当给定一个使用 SOAP Document/literal wrapped style (also described here) 的 WSDL 时,它会生成一个带有“裸”SOAP binding parameter style 的服务接口(在方法签名中具有多个参数和返回值扩展为 "holder" objects),而不是WSDL 指定的简单包装参数和返回值。其他工具,例如 Axis2 wsdl2java 只是使用包装器元素作为输入参数和返回值,而不是自动“解包”它们。

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

【问题讨论】:

    标签: java soap wsdl jax-ws wsimport


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

      @beny23 的答案是正确的;但是,事实证明您可以embed the JAX-WS binding instructions into the WSDL file itself,这样就无需将“-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>
      

      【讨论】:

      • 但这不会影响 WSDL 的所有用户吗?因此,如果您不想在您这边(客户端或服务器)使用包装器,但您的合作伙伴在另一边想要包装器,那么您是否阻碍了它们?
      • @dbreaux 是的,至少对于 JAX-WS 用户来说是这样;我只是想指出另一种选择,以防它更适合某些用户(例如我自己=P)
      猜你喜欢
      • 1970-01-01
      • 2014-07-25
      • 2014-06-21
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      • 2011-05-10
      • 2017-07-19
      • 1970-01-01
      相关资源
      最近更新 更多