wsimport如何从WSDL为http:binding GET / POST创建Web服务客户端

时间:2010-04-06 09:24:40

标签: web-services wsdl wsimport

我有wsdl,我使用wsimport工具创建类。对于SOAP消息,一切都正常,但对于http:绑定GET / POST,我得到错误。 WSDL的一部分如下:

<wsdl:binding name="DictServiceHttpPost" type="tns:DictServiceHttpPost"> 
    <http:binding verb="POST" /> 
...
...
...
<wsdl:port name="DictServiceHttpGet" binding="tns:DictServiceHttpGet"> 
      <http:address location="http://services.aonaware.com/DictService/DictService.asmx" /> 
    </wsdl:port> 
    <wsdl:port name="DictServiceHttpPost" binding="tns:DictServiceHttpPost"> 
      <http:address location="http://services.aonaware.com/DictService/DictService.asmx" /> 
</wsdl:port>

wsimport为SOAP端口生成类,但是对于GET / POST,但是当我使用它们时,我收到错误。

Caused by: com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error: SEI invoker.DictServiceHttpPost has method match annotated as BARE but it has more than one parameter bound to body. This is invalid. Please annotate the method with annotation: @SOAPBinding(parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
    at com.sun.xml.internal.ws.model.RuntimeModeler.validateDocBare(RuntimeModeler.java:1247)
    at com.sun.xml.internal.ws.model.RuntimeModeler.processDocBareMethod(RuntimeModeler.java:1236)
    at com.sun.xml.internal.ws.model.RuntimeModeler.processMethod(RuntimeModeler.java:609)
    at com.sun.xml.internal.ws.model.RuntimeModeler.processClass(RuntimeModeler.java:401)
    at com.sun.xml.internal.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:240)
    at com.sun.xml.internal.ws.client.WSServiceDelegate.createSEIPortInfo(WSServiceDelegate.java:687)
    at com.sun.xml.internal.ws.client.WSServiceDelegate.addSEI(WSServiceDelegate.java:675)
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:330)
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:313)
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:295)
    at javax.xml.ws.Service.getPort(Service.java:92)
    at invoker.DictService.getDictServiceHttpPost(DictService.java:124)
    ... 29 more
com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error: SEI invoker.DictServiceHttpPost has method match annotated as BARE but it has more than one parameter bound to body. This is invalid. Please annotate the method with annotation: @SOAPBinding(parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)

1 个答案:

答案 0 :(得分:0)

这件事发生在我身上,问题是我在服务实现中有一个公共方法,它有多个参数,但这个方法不是服务操作。标记为:SOAPBinding.ParameterStyle.BARE的服务应该只有只有一个参数的公共方法。我的解决方案是将此方法标记为私有,因为我从服务(操作)的一个公共方法中使用它。

确保您的服务实现中没有任何具有多个参数的公共方法。