Can Groovy be a client to JAX-RPC-style web service?

1.7k Views Asked by At

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?

3

There are 3 best solutions below

2
On BEST ANSWER

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").

5
On

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?

0
On

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.