grails - GroovyWS 和复杂请求

标签 grails web-services groovy groovyws

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

请注意,正在创建的类中可能涉及一些命名空间。我使用在 GroovyWS 处理 WSDL 时打印的 CXF 日志来查看 CXF 认为类名实际上应该是什么。

关于grails - GroovyWS 和复杂请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3317453/

相关文章:

java - 将 JAX-WS 集成到 Spring Boot

node.js - http-server-usr/bin/env : node : no such file or directory

grails - 如何看Grails幕后的情况?

hibernate - Grails GORM-查找表

java - 如何在不同机器上调试部署在 tomcat 上的 Web 服务?

java - 如何在 Java 中处理无符号短裤/整数/长裤

java - 请帮我弄清楚这个网络代理代码有什么问题

json - 在Groovy中从JSONArray删除特定的JSONObject

tomcat在部署war文件和重启服务器时挂起

grails - Jasypt 加密字段和 Criteria API 未获得结果(Grails)