Hello all, As I understand, each time a server receives an xmlrpc invocation a new object is created for the class registered to handle this. I do not wish to have this happen as it produces problems for me to map the invocations to any non-static objects especially if I have more than one xml-rpc server. >From browsing some discussion earlier this month on the mailing list I gather that there is not much control provided in apache xmlrpc over this behaviour. In any case, I managed to hack something that seems to work and this is how I managed to address the issue, maybe it is of some help to anyone else who needs something similar..
when starting the xmlrpc server I need to register a handler mapping that is used to find the classes to create and the methods to invoke: xmlRpcServer.setHandlerMapping(mapping); to have some control over object creation I then use my own handler mapping like this public class XmlRpcFooHandlerMapping implements XmlRpcHandlerMapping { //this is set in the constructor and gets as a parameter the non-static object I wish to use.. private final XmlRpcFooHandler handler; public XmlRpcFooHandlerMapping(XmlRpcFooHandler handler) { this.handler = handler; } public XmlRpcHandler getHandler(String name) throws XmlRpcNoSuchHandlerException, XmlRpcException { //.. here some simple checks on the name like it contains "Foo".. return handler; } } and the handler.. public class XmlRpcFooHandler implements XmlRpcHandler { //set this in the constructor and use in any way you like, it should be the same obejct for all invocations.. private final Foo foo; public XmlRpcFooHandler(Foo foo) { this.foo = foo; } //here I inspire from the default implementation and use the TypeConverter class to conver the parameters.. //since I know exactly the class (Foo.class) I wish to use, I can do lots of shortcuts such as expect method matching with just method names to be enough... } So thats it.. I hope it helps someone. If someone can suggest something more elegant, point out some flaws in it or whatever I am happy to hear.. Teemu