显然,Groovy 很容易使用 Web 服务。它可以使用需要 JAX-RPC 而不是 JAX-WS 的 Web 服务吗?我应该使用旧版本的 Groovy 或其库来执行此操作吗?
3 回答
使用 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")
.
“它可以使用需要 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)
你有什么特别的错误吗?
由于 Groovy 可以使用已编译的 Java 类,因此有时访问基于 SOAP 的 Web 服务的最简单方法就是生成存根并编写使用它们的 Groovy 客户端。使用您的“wsimport”工具 (JAX-WS) 或 wsdl2java (JAX-RPC) 生成存根,然后像往常一样编写 Groovy 类。