What is the XMLRPC module?

This is a module which

allows you to create a local XML-RPC server and/or to make calls on remote XML-RPC servers

.

What is XML-RPC?

XML-RPC is a spec and a set of implementations that allow software running on disparate operating systems, running in different environments to make procedure calls over the Internet. It uses HTTP as the transport and XML as the encoding. XML-RPC is designed to be as simple as possible while allowing complex data structures to be transmitted, processed and returned.

Using XMLRPC

Here is an example:

The Server

It's really easy to set up a server which provides a set of remotely callable functions.

  1. Create a server object
    import groovy.net.xmlrpc.*
    import java.net.ServerSocket
    
    def server = new XMLRPCServer()
    
  2. Add some methods
    server.echo = {return it}  // the closure is now named "echo" and is remotely callable
    
  3. Start the server
    def serverSocket = new ServerSocket( 0 )   // Open a server socket on a free port
    server.startServer(serverSocket)           // Start the XML-RPC server listening on the server socket
    
  4. You're done!

The Client

It's pretty easy to make the remote calls too

  1. Create a proxy object to represent the remote server
    def serverProxy = new XMLRPCServerProxy("http://localhost:${serverSocket.getLocalPort()}")
    
  2. Call the remote method via the proxy
    println serverProxy.echo("Hello World!")
    
  3. That's all you need

More information

The sources can be found here : XML-RPC.
For a binary download, go to the repository.
If you are using maven to download your dependencies, you won't find all the dependencies in the Maven 2 Repo yet.
The missing dependency (smack) can be manually downloaded from here.
If you are using POMs, the following workaround can be used, to use smack 3.1.0 instead of 3.0.1:

<dependency>
	<groupId>org.codehaus.groovy</groupId>
	<artifactId>groovy-xmlrpc</artifactId>
	<version>0.7</version>
	<!-- The version of smack is NOT in Maven central -->
	<exclusions>
		<exclusion>
			<groupId>jivesoftware</groupId>
			<artifactId>smack</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<!-- So, we define our own smack dependency -->
<dependency>
	<groupId>org.igniterealtime.smack</groupId>
	<artifactId>smack</artifactId>
	<version>3.1.0</version>
</dependency>

Sample scripts