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。
I've faced with a problem of sending complex requests with GroovyWS.
This is sample request generated by 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>
the piece of groovy code:
def proxy = webService.getClient(grailsApplication.config.ws.endpoint);
proxy.processdRequest(?);
So what I should pass instead of ?.
Thanks for you help.
-vova.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
GroovyWS 为您需要的每个参数类型动态创建类,以便将数据传递到 Web 服务调用。例如,如果 Web 服务调用是:
GroovyWS 将动态创建一个 Arg1Type 类和一个 Arg2Type 类,您可以通过代理上的方法访问它们。
然后,您可以使用数据填充 arg1/arg2 实例并进行调用:
请注意,正在创建的类中可能涉及一些名称空间。我使用 GroovyWS 处理 WSDL 时打印的 CXF 日志记录来查看 CXF 认为类名实际上应该是什么。
GroovyWS dynamically creates classes for each of the argument types you need in order to pass data to the web service call. For instance, if the webservice call was:
GroovyWS would dynamically create an Arg1Type class and an Arg2Type class, which you could access via a method on the proxy.
You can then populate the arg1/arg2 instance with data and make your call:
Note, there are probably some namespaces involved in the classes being created. I used the CXF logging that was printed as GroovyWS was processing the WSDL to see what CXF thought the class names should actually be.
非常感谢比尔。
我只是想为未来的读者添加一些信息。
要在 Grails 中打开 GroovyWS 的日志记录:
通过 Bill 提到的,您可以看到类的名称。
另一件事:
参数
可能有不同的类型。不是列表
。这就是为什么它也应该被创建。要检索新创建的对象的可用方法和字段,您可以使用 Groovy 反射:
仅此而已!
-沃瓦
Many thanks Bill.
I just want to add some info for future readers.
To turn on logging for GroovyWS in Grails:
With this as mentioned Bill you can see the names of the classes.
One more thing:
parameters
may have different type. NotList<?>
. That's why it should be created too.To retrieve available methods and fields for newly created objects you can use Groovy reflection:
That's all!
-vova
谢谢!我让 GroovyWS 与一个非常复杂的 Web 服务一起工作!
我的步骤:我打开调试来获取根类,然后执行反射代码来获取内部类,然后继续设置属性并检查它是字符串还是列表。
瞧!
Thanks! I got GroovyWS working with a really complex webservice!
My steps: I turned on debug to get the root class, then did that reflection code to get inner classes, and go on setting properties and check if it is string or list.
And voilá!