解決策を発見しました。キーは、RequestProcessorFactoryFactoryをサブクラス化し、そのサブクラスを使用するハンドラを指定することです。
http://ws.apache.org/xmlrpc/apidocs/org/apache/xmlrpc/server/RequestProcessorFactoryFactory.RequestSpecificProcessorFactoryFactory.html
protected java.lang.Object getRequestProcessor(java.lang.Class pClass,
XmlRpcRequest pRequest)
throws XmlRpcException
サブクラスは、要求特定の構成のために、このメソッドをオーバーライドすることができます。
public class MyRequestProcessorFactoryFactory
extends RequestProcessorFactoryFactory.RequestSpecificProcessorFactoryFactory {
protected Object getRequestProcessor(Class pClass, XmlRpcRequest pRequest) {
Object result = super.getRequestProcessor(pClass, pRequest);
// Configure the object here
...
return result;
}
}
パラメータ:: - requestオブジェクト pRequest典型的なサブクラスは、このようになります。 例外: XmlRpcException
はここにあなたの工場を使用するデフォルトのハンドラを伝える例です:
public class EchoServer {
public static void main(String[] args) throws Exception {
WebServer webServer = new WebServer(8080);
XmlRpcServer xmlRpcServer = webServer.getXmlRpcServer();
PropertyHandlerMapping phm = new PropertyHandlerMapping();
EchoService echo = new EchoServiceImpl();
phm.setRequestProcessorFactoryFactory(new MyRequestProcessorFactoryFactory());
phm.setVoidMethodEnabled(true);
phm.addHandler(EchoService.class.getName(), EchoService.class);
xmlRpcServer.setHandlerMapping(phm);
XmlRpcServerConfigImpl serverConfig = (XmlRpcServerConfigImpl) xmlRpcServer.getConfig();
serverConfig.setEnabledForExtensions(true);
serverConfig.setContentLengthOptional(false);
webServer.start();
}
}
だから私の元の質問に答えるために、私はfolowsとしてRequestProcessorFactoryFactoryを作成します。
public class MyRequestProcessorFactoryFactory
extends RequestProcessorFactoryFactory.RequestSpecificProcessorFactoryFactory {
protected Object getRequestProcessor(Class pClass, XmlRpcRequest pRequest) {
Object result = super.getRequestProcessor(pClass, pRequest);
// Configure the object here
ClassOfObjectBeingExposedViaXmlRpc obj = (ClassOfObjectBeingExposedViaXmlRpc) result;
XmlRpcHttpRequestConfig httpRequest = (XmlRpcHttpRequestConfig) pRequest.getConfig();
MyUserClass user = authenticateSomehow(httpRequest.getBasicUserName(), httpRequest.getBasicPassword());
obj.setUser(user);
return result;
}
}
したがって、公開されたXML-RPCオブジェクトは、認証されたユーザーを参照し、それに応じてメソッドを承認することができます。
どのXML-RPCサーバーの実装を使用していますか? –
Apache XML-RPC - > http://ws.apache.org/xmlrpc/ – Alexandre