これは、ApacheXMLRPC3.xの標準的な動作です。http://ws.apache.org/xmlrpc/handlerCreation.html:
デフォルトでは、Apache XML-RPCは、サーバー側で受信した各リクエストを処理するための新しいオブジェクトを作成します。
ただし、RequestProcessorFactoryFactoryを使用して、ハンドラークラスの代わりにハンドラーオブジェクトを登録したXMLRPC2.xの動作をエミュレートできます。使用できるカスタムRequestProcessorFactoryFactoryを作成しました。
public class CustomHandler implements RequestProcessorFactoryFactory {
Map<Class<?>, RequestProcessorFactory> handlers =
Collections.synchronizedMap(
new HashMap<Class<?>, RequestProcessorFactory>());
@Override
public RequestProcessorFactory getRequestProcessorFactory(Class pClass)
throws XmlRpcException {
return handlers.get(pClass);
}
public void addHandler(final Object handler) {
handlers.put(handler.getClass(), new RequestProcessorFactory() {
@Override
public Object getRequestProcessor(XmlRpcRequest pRequest)
throws XmlRpcException {
return handler;
}
});
}
}
これは、たとえば次のようなXMLRPCWebサーバーで使用できます。
WebServer server = ...
PropertyHandlerMapping phm = new PropertyHandlerMapping();
server.getXmlRpcServer().setHandlerMapping(phm);
Custom sh = new CustomHandler();
phm.setRequestProcessorFactoryFactory(sh);
Object handler = ... /** The object you want to expose via XMLRPC */
sh.addHandler(handler);
phm.addHandler(serverName, handler.getClass());