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

Reply via email to