Java SOAP “wsimport” - force wrapped binding from document/literal wrapped WSDL?

丶灬走出姿态 提交于 2020-01-30 14:17:25

问题


The Java 6 JAX-WS "wsimport" utility does a great job of generating a web service skeleton (interface) given a WSDL file but with one personally annoying exception.

When given a WSDL that uses the SOAP Document/literal wrapped style (also described here) it generates a service interface with a "bare" SOAP binding parameter style (with multiple arguments and return values expanded as "holder" objects in the method signatures) instead of the simple wrapped parameter and return value specified by the WSDL. Other tools, such as Axis2 wsdl2java simply use the wrapper elements as the input parameter and return value instead of automatically "unwrapping" them.

Is it possible to tell "wsimport" to keep the SOAP binding parameters as "wrapped" instead of "bare"?


回答1:


AFAIK, you'd need to specify a custom binding file to disable the wrapper style:

<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>

and then invoke wsimport

$ wsimport -b binding.xml OperationService.wsdl



回答2:


The answer from @beny23 is on the right track; however, it turns out that you can embed the JAX-WS binding instructions into the WSDL file itself, which eliminates the need to add the "-b binding.xml" switches to the "wsimport" command:

<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>


来源:https://stackoverflow.com/questions/7032381/java-soap-wsimport-force-wrapped-binding-from-document-literal-wrapped-wsdl

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!