我遇到了使用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/

10-13 21:31