Skip to content
Skip to breadcrumbs
Skip to header menu
Skip to action menu
Skip to quick search
Quick Search
Browse
Pages
Blog
Labels
Attachments
Mail
Advanced
What’s New
Space Directory
Feed Builder
Keyboard Shortcuts
Confluence Gadgets
Log In
Sign Up
Dashboard
Groovy
Copy Page
You are not logged in. Any changes you make will be marked as
anonymous
. You may want to
Log In
if you already have an account. You can also
Sign Up
for a new account.
This page is being edited by
.
Paragraph
Paragraph
Heading 1
Heading 2
Heading 3
Heading 4
Heading 5
Heading 6
Preformatted
Quote
Bold
Italic
Underline
More colours
Strikethrough
Subscript
Superscript
Monospace
Clear Formatting
Bullet list
Numbered list
Outdent
Indent
Align left
Align center
Align right
Link
Table
Insert
Insert Content
Image
Link
Attachment
Symbol
Emoticon
Wiki Markup
Horizontal rule
tinymce.confluence.insert_menu.macro_desc
Info
JIRA Issue
Status
Gallery
Tasklist
Table of Contents
Other Macros
Page Layout
No Layout
Two column (simple)
Two column (simple, left sidebar)
Two column (simple, right sidebar)
Three column (simple)
Two column
Two column (left sidebar)
Two column (right sidebar)
Three column
Three column (left and right sidebars)
Undo
Redo
Find/Replace
Keyboard Shortcuts Help
<h2>What is the XMLRPC module?</h2> <p>This is a module which <table class="wysiwyg-macro" data-macro-name="excerpt" data-macro-parameters="atlassian-macro-output-type=INLINE" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2V4Y2VycHQ6YXRsYXNzaWFuLW1hY3JvLW91dHB1dC10eXBlPUlOTElORX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p>allows you to create a local XML-RPC server and/or to make calls on remote XML-RPC servers</p></td></tr></table>.</p> <h2>What is XML-RPC?</h2> <p><a href="http://www.xml-rpc.org/">XML-RPC</a> 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.</p> <h2>Using XMLRPC</h2> <p>Here is an example:</p> <h3>The Server</h3> <p>It's really easy to set up a server which provides a set of remotely callable functions.</p> <ol> <li>Create a server object <table class="wysiwyg-macro" data-macro-name="code" data-macro-default-parameter="java" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGU6amF2YX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre> import groovy.net.xmlrpc.* import java.net.ServerSocket def server = new XMLRPCServer() </pre></td></tr></table></li> <li>Add some methods <table class="wysiwyg-macro" data-macro-name="code" data-macro-default-parameter="java" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGU6amF2YX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre> server.echo = {return it} // the closure is now named "echo" and is remotely callable </pre></td></tr></table></li> <li>Start the server <table class="wysiwyg-macro" data-macro-name="code" data-macro-default-parameter="java" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGU6amF2YX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre> 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 </pre></td></tr></table></li> <li>You're done!</li> </ol> <h3>The Client</h3> <p>It's pretty easy to make the remote calls too</p> <ol> <li>Create a proxy object to represent the remote server <table class="wysiwyg-macro" data-macro-name="code" data-macro-default-parameter="java" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGU6amF2YX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre> def serverProxy = new XMLRPCServerProxy("http://localhost:${serverSocket.getLocalPort()}") </pre></td></tr></table></li> <li>Call the remote method via the proxy <table class="wysiwyg-macro" data-macro-name="code" data-macro-default-parameter="java" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGU6amF2YX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre> println serverProxy.echo("Hello World!") </pre></td></tr></table></li> <li>That's all you need</li> </ol> <h2>More information</h2> <p>The sources can be found here : <a href="http://svn.codehaus.org/groovy/trunk/groovy/modules/xmlrpc/">XML-RPC</a>.<br /> For a binary download, go to the <a href="http://repository.codehaus.org/org/codehaus/groovy/groovy-xmlrpc/">repository</a>.<br /> If you are using maven to download your dependencies, you won't find all the dependencies in the Maven 2 Repo yet.<br /> The missing dependency (smack) can be manually downloaded from <a href="http://www.igniterealtime.org/downloads/index.jsp">here</a>.<br /> If you are using POMs, the following workaround can be used, to use smack 3.1.0 instead of 3.0.1:</p> <table class="wysiwyg-macro" data-macro-name="code" data-macro-default-parameter="xml" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGU6eG1sfQ&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre> <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> </pre></td></tr></table> <h2>Sample scripts</h2> <ul class="alternate"> <li><a href="http://blogs.bytecode.com.au/glen/2006/10/28/1162018378955.html">Confluence Example</a> showing how to download a secured Confluence page.</li> <li>Another example inspired by Glen's Confluence example: <table class="wysiwyg-macro" data-macro-name="code" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGV9&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre> 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 </pre></td></tr></table> Which results in (at least around December 2007) the following: <table class="wysiwyg-macro" data-macro-name="code" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGV9&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre> //////////////////////////////////// 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 //////////////////////////////////// </pre></td></tr></table></li> </ul>
Please type the word appearing in the picture.
Attachments
Labels
Location
Watch this page
< Edit
Preview >
Loading…
Save
Cancel
Next hint
search
attachments
weblink
advanced