client-side (stand-alone Java app):
org.apache.xmlrpc.XmlRpcClientLite xrc_ = new
org.apache.xmlrpc.XmlRpcClientLite("
http://www.acme.com/xmlrpcurl") ;
java.util.Vector vParams = new java.util.Vector() ;
java.util.Hashtable ht = new java.util.Hashtable() ;
ht.put("environment", sEnvironment) ;
ht.put("authData", sAuthData) ;
vParams.addElement(ht) ;
String sToken = (String) xrc_.execute("myserver.attach", vParams) ;
server-side (Tomcat, actually in a JSP):
// ...XML/RPC handler class
public static class MyHandler {
public String attach(java.util.Hashtable h)
throws java.security.NoSuchAlgorithmException
,org.apache.xmlrpc.XmlRpcException {
try {
// ...the required args
String sEnvironment = (String) h.get("environment") ;
String sAuthData = (String) h.get("authData") ;
// ...etc
return "return value" ;
}
catch(NullPointerException x) {
throw new org.apache.xmlrpc.XmlRpcException(-2, "missing
\"environment\" or \"authData\" parameters?") ;
}
catch(ClassCastException x) {
throw new org.apache.xmlrpc.XmlRpcException(-2, "unexpected
\"environment\" or \"authData\" parameter types?") ;
}
}
}
// ...one-time init
private static org.apache.xmlrpc.XmlRpcServer xrs = null ;
if(null==xrs) {
xrs = new org.apache.xmlrpc.XmlRpcServer() ;
xrs.addHandler("myserver", new MyHandler()) ;
}
To clarify the "one-time init" code snippet -- the JSP more-or-less
does:
if(null!=request.getContentType() &&
request.getContentType().equals("text/xml")) {
if(null==xrs) {
xrs = new org.apache.xmlrpc.XmlRpcServer() ;
xrs.addHandler("myserver", new MyHandler()) ;
}
byte [] abResult = xrs.execute(request.getInputStream()) ;
response.setContentType("text/xml") ;
response.setContentLength(abResult.length) ;
out.clear() ;
out.write(new String(abResult)) ;
out.flush() ;
}