Groovy 可以成为 JAX-RPC 风格的 Web 服务的客户端吗?

发布于 2024-08-09 13:01:38 字数 96 浏览 7 评论 0原文

显然,Groovy 可以轻松使用 Web 服务。它可以使用需要 JAX-RPC 而不是 JAX-WS 的 Web 服务吗?我应该使用旧版本的 Groovy 或其库来执行此操作吗?

Apparently, Groovy easily consumes web services. Can it consume a web service that needs JAX-RPC instead of JAX-WS? Should I use an older version of Groovy or its libraries to do so?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

心不设防 2024-08-16 13:01:38

使用 XML-RPC Web 服务确实很容易。您需要 Groovy XML-RPC 以及 Smack 库位于类路径中。

我编写了一些 groovy 脚本来与我们的 Atlassian Confluence wiki 配合使用,这里有一个简短的示例来检索使用 XML-RPC 的 wiki 页面:

import groovy.net.xmlrpc.*

def c = new XMLRPCServerProxy("http://host:port/rpc/xmlrpc")
def token = c.confluence1.login("username","password")

def page = c.confluence1.getPage(token, "SPACE", "pagename")
println page.content

c.confluence1.logout(token);

您可以使用 XMLRPCServerProxy 访问 XML-RPC 服务。如果您的服务需要复杂的参数作为参数或返回参数,则这些参数将表示为 Groovy 映射,其中属性名称作为键,其值作为相应的值。在上面的脚本中,服务 getPage 返回一个 Page 对象,它是一个地图,但由于您可以使用 Groovy 中的点表示法直接访问地图的键,page.content 与 page.get("content") 相同。

It's really easy to consume XML-RPC web services. You need the Groovy XML-RPC as well as the Smack library in your classpath.

I wrote some groovy scripts to work with our Atlassian Confluence wiki and here's a short example to retrieve a wiki page using XML-RPC:

import groovy.net.xmlrpc.*

def c = new XMLRPCServerProxy("http://host:port/rpc/xmlrpc")
def token = c.confluence1.login("username","password")

def page = c.confluence1.getPage(token, "SPACE", "pagename")
println page.content

c.confluence1.logout(token);

You use the XMLRPCServerProxy to access the XML-RPC services. If your services require complex parameters as parameters or return one, these are represented as Groovy maps, with the attribute name as key and it's value as the corresponding value. In the script above, the service getPage returns a Page object, which is a map, but as you can directly access a map's key using the dot-notation in Groovy, page.content is the same as page.get("content").

轮廓§ 2024-08-16 13:01:38

“它可以使用需要 JAX-RPC 而不是 JAX-WS 的 Web 服务吗”是什么意思?您认为 Groovy 方面有何不同?您是否尝试按照记录调用该 Web 服务

import groovyx.net.ws.WSClient

def proxy = new WSClient("http://localhost:6980/MathService?wsdl", this.class.classLoader)
proxy.initialize() // from 0.5.0
def result = proxy.add(1.0 as double, 2.0 as double)
assert (result == 3.0)

result = proxy.square(3.0 as double)
assert (result == 9.0)

:你有什么特别的错误吗?

What do you mean by "can it consume a web service that needs JAX-RPC instead of JAX-WS"? What differences do you expect on the Groovy side? Did you try to call that web service as documented:

import groovyx.net.ws.WSClient

def proxy = new WSClient("http://localhost:6980/MathService?wsdl", this.class.classLoader)
proxy.initialize() // from 0.5.0
def result = proxy.add(1.0 as double, 2.0 as double)
assert (result == 3.0)

result = proxy.square(3.0 as double)
assert (result == 9.0)

Do you get any particular error?

冷心人i 2024-08-16 13:01:38

由于 Groovy 可以使用已编译的 Java 类,因此有时访问基于 SOAP 的 Web 服务的最简单方法就是生成存根并编写使用它们的 Groovy 客户端。使用“wsimport”工具 (JAX-WS) 或 wsdl2java (JAX-RPC) 生成存根,并像往常一样编写 Groovy 类。

Since Groovy can work with compiled Java classes, sometimes the easiest way to access a SOAP-based web service is to just generate the stubs and write a Groovy client that uses them. Use your "wsimport" tool (JAX-WS) or wsdl2java (JAX-RPC) to generate the stubs, and write your Groovy class as usual.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文