我遇到了使用GroovyWS发送复杂请求的问题。
这是soapUI生成的示例请求:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:dex="http://www.temp.com/com/dex"
>
<soapenv:Header/>
<soapenv:Body>
<dex:executeRequest>
<!--Optional:-->
<a>?</a>
<!--Optional:-->
<b>?</b>
<!--Optional:-->
<parameters>
<!--Zero or more repetitions:-->
<parameter>
<!--Optional:-->
<key>?</key>
<!--Optional:-->
<value>?</value>
</parameter>
</parameters>
<!--Optional:-->
<c>?</c>
<!--Optional:-->
<d>?</d>
</dex:feedrequest>
</soapenv:Body>
</soapenv:Envelope>
常规代码:
def proxy = webService.getClient(grailsApplication.config.ws.endpoint);
proxy.processdRequest(?);
那我应该通过什么而不是? 。
感谢您的帮助。
-vova。
最佳答案
GroovyWS为您需要的每种参数类型动态创建类,以便将数据传递到Web服务调用。例如,如果网络服务调用为:
public int passSomeArgs( Arg1Type a, Arg2Type b );
GroovyWS将动态创建Arg1Type类和Arg2Type类,您可以通过代理上的方法来访问它们。
// this will instantiate an Arg1Type for you
def arg1 = proxy.create( "ns1.ns2.Arg1Type" );
// this will instantiate an Arg2Type for you
def arg2 = proxy.create( "ns1.ns2.Arg2Type" );
然后,您可以使用数据填充arg1/arg2实例并进行调用:
int ret = proxy.passSomeArgs( arg1, arg2 );
注意,正在创建的类中可能涉及一些 namespace 。我使用了在GroovyWS处理WSDL时打印的CXF日志记录,以查看CXF认为类名实际上应该是什么。
关于grails - GroovyWS和复杂的请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3317453/