Search code examples
web-servicesgroovyjax-wsjax-rpc

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


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?


Solution

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