wsimport 如何从 WSDL 为 http:binding GET/POST 创建 Web 服务客户端 [英] wsimport how to create web service client from WSDL for http:binding GET/POST

查看:26
本文介绍了wsimport 如何从 WSDL 为 http:binding GET/POST 创建 Web 服务客户端的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have wsdl and I create classes with wsimport tool. Everything is going ok for SOAP messages but for http:binding GET/POST I get error. Part of the WSDL follows:

<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 但当我使用它们时,我收到错误.

wsimport generates classes, for SOAP port its working but for GET/POST but when I use them, I receive error.

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)

推荐答案

我遇到了这种情况,问题是我在服务实现中有一个公共方法,有多个参数但这个方法不是服务操作.标记为: SOAPBinding.ParameterStyle.BARE 的服务应该只有只有一个参数的公共方法.我的解决方案是将此方法标记为私有,因为我是从服务的一种公共方法(操作)中使用它的.

This happened to me, the problem was that I had a public method in the service implementation, that had more than one parameter but this method was not a service operation. Services marked with: SOAPBinding.ParameterStyle.BARE should only have public methods with only one parameter. My solution was mark this method as private since I was using it from one public method of the service (operation).

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

Make sure you don't have any public method in your service implementation that has more than one parameter.

这篇关于wsimport 如何从 WSDL 为 http:binding GET/POST 创建 Web 服务客户端的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆