About¶
Fathom-XMLRPC integrates with Fathom-REST and Fathom-Security and allows you to register XML-RPC methods quickly and easily.
Installation¶
Add the Fathom-XMLRPC artifacts.
<dependency>
<groupId>com.gitblit.fathom</groupId>
<artifactId>fathom-xmlrpc</artifactId>
<version>${fathom.version}</version>
</dependency>
<dependency>
<groupId>com.gitblit.fathom</groupId>
<artifactId>fathom-xmlrpc-test</artifactId>
<version>${fathom.version}</version>
<scope>test</scope>
</dependency>
Usage¶
There are three steps to setting up XML-RPC methods.
- Register a POST handler for your XML-RPC methods.
- Within the definition of your POST handler, register the method group classes.
- Implement the method group classes.
Note
- Your XML-RPC method group classes may optionally be annotated with
@XmlRpc
. If you do not supply a name value to the@xmlRpc
class attribute, the fully qualified class name will be used as the method group name. - Your XML-RPC methods must be public and must be annotated with
@XmlRpc
. If you do not supply a name value to the@XmlRpc
method attribute, the actual method name will be used.
Example¶
public class Routes extends RoutesModule {
@Override
protected void setup() {
POST("/RPC2", MyXmlRpcMethods.class);
}
}
public class MyXmlRpcMethods extends XmlRpcRouteHandler {
@Inject
public MyXmlrpcMethods(XmlRpcMethodRegistrar methodRegistrar) {
super(methodRegistrar);
methodRegistrar.addMethodGroup(MyGroupXmlRpcMethods.class);
}
}
@XmlRpc("myGroup")
public class MyGroupXmlRpcMethods {
// myGroup.min
@XmlRpc
public int min(int a, int b) {
return Math.min(a, b);
}
// myGroup.randomSecret
@XmlRpc("randomSecret")
@RequireAuthenticated
public String secretPhrase() {
return UUID.randomUUID().toString();
}
}
Security¶
The base Fathom-XMLRPC handler will automatically authenticate incoming requests using the Authorization
header and delegates authentication of BASIC
(username & password) and TOKEN
to the Fathom-Security SecurityManager.
Note
Use of authentication and authorization is not required.
Testing¶
The fathom-xmlrpc-test
dependency offers a simple integration test base class and adds the Apache XML-RPC client to your test classpath.
public class MyXmlRpcMethodsTest extends XmlRpcIntegrationTest {
@Test
public void testMinAsAnon() {
int value = callAnon("myGroup.min", 1, 2);
assertEquals("Unexpected minimum value!", 1, value);
}
@Test(expected = RuntimeExcepion.class)
public void testRandomSecretAsAnon() {
String secret = callAnon("myGroup.randomSecret");
assertNotNull("Secret is null!", secret);
}
@Test
public void testRandomSecretAsAdmin() {
String secret = callAsAdmin("myGroup.randomSecret");
assertNotNull("Secret is null!", secret);
}
protected <X> X callAsAdmin(String methodName, Object... args) {
return call("admin", "admin", "/RPC2", methodName, args);
}