Это стандартное поведение Apache XMLRPC 3.x. http://ws.apache.org/xmlrpc/handlerCreation.html:
По умолчанию Apache XML-RPC создает новый объект для обработки каждого
запрос получен на стороне сервера.
Однако вы можете эмулировать поведение XMLRPC 2.x, где вы регистрировали объекты-обработчики вместо классов-обработчиков, используя RequestProcessorFactoryFactory. Я написал пользовательский 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;
}
});
}
}
Это может быть использовано, например, с XMLRPC WebServer, подобный этому
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());