Java 6 JAX-WS“wsimport”实用程序在给定WSDL文件的情况下可以很好地生成Web服务框架(接口),但有一个个人讨厌的异常。
当给定使用SOAP Document/literal wrapped style(also described here)的WSDL时,它会生成一个带有“bare”SOAP binding parameter style的服务接口(带有多个参数,返回值扩展为"holder" objects在方法签名中)而不是由WSDL指定的简单包装参数和返回值。其他工具,例如Axis2 wsdl2java,只需使用包装元素作为输入参数并返回值,而不是自动“解包”它们。
是否可以告诉“wsimport”将SOAP绑定参数保持为“wrapped”而不是“bare”?
答案 0 :(得分:37)
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
答案 1 :(得分:15)
@ 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>