This is a module which
allows you to create a local XML-RPC server and/or to make calls on remote XML-RPC servers |
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.
Here is an example:
It's really easy to set up a server which provides a set of remotely callable functions.
import groovy.net.xmlrpc.* import java.net.ServerSocket def server = new XMLRPCServer() |
server.echo = {return it} // the closure is now named "echo" and is remotely callable
|
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 |
It's pretty easy to make the remote calls too
def serverProxy = new XMLRPCServerProxy("http://localhost:${serverSocket.getLocalPort()}")
|
println serverProxy.echo("Hello World!")
|
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> |
import groovy.net.xmlrpc.*
def c = new XMLRPCServerProxy("http://docs.codehaus.org/rpc/xmlrpc")
def token = c.confluence1.login("your_username","your_password")
// print all the code snippets from the Groovy Home page
def page = c.confluence1.getPage(token, "Groovy", "Home")
def incode = false
def separator = '////////////////////////////////////'
page.content.split('\n').each{
if (it =~ /\{code\}/) {
incode = !incode
if (incode) println separator
return
}
if (incode) print it
}
println separator
|
////////////////////////////////////
def name='World'; println "Hello $name!"
////////////////////////////////////
class Greet {
def name
Greet(who) { name = who[0].toUpperCase() +
who[1..-1] }
def salute() { println "Hello $name!" }
}
g = new Greet('world') // create object
g.salute() // Output "Hello World!"
////////////////////////////////////
import static org.apache.commons.lang.WordUtils.*
class Greeter extends Greet {
Greeter(who) { name = capitalize(who) }
}
new Greeter('world').salute()
////////////////////////////////////
groovy -e "println 'Hello ' + args[0]" World
////////////////////////////////////
|