[prev in list] [next in list] [prev in thread] [next in thread]
List: xmlrpc-dev
Subject: [jira] Commented: (XMLRPC-117) XmlRpcServlet should allow for
From: "Jimisola Laursen (JIRA)" <xmlrpc-dev () ws ! apache ! org>
Date: 2006-09-26 9:36:53
Message-ID: 16239499.1159263413068.JavaMail.jira () brutus
[Download RAW message or body]
[ http://issues.apache.org/jira/browse/XMLRPC-117?page=comments#action_12437783 ] \
Jimisola Laursen commented on XMLRPC-117:
-----------------------------------------
Jochen,
Tried my patch with Jetty 6.0.1 (due to JETTY-121) and we have a Catch 22 problem \
with my patch and the current workings of XmlRpcServlet. A NPE will occur on \
XmlRpcServlet.setAuthenticationHandler:85:
server.setAuthenticationHandler(pHandler);
with the following code (slightly updated version of the test for XMLRPC-116 to make \
use of JETTY-121):
org.mortbay.jetty.Server server = new org.mortbay.jetty.Server();
Connector connector = new SocketConnector();
connector.setPort(8080);
server.setConnectors(new Connector[]{connector});
Context root = new Context(server, "/", Context.SESSIONS);
XmlRpcServlet servlet = new XmlRpcServlet();
ServletHolder servletHolder = new ServletHolder(servlet);
servlet.setAuthenticationHandler(new MyAuthenticationHandler());
root.addServlet(servletHolder, "/RPC2/*");
servletHolder.setInitParameter("enabledForExtensions", "true");
servletHolder.setInitParameter("contentLengthOptional", "true");
server.setSendServerVersion(true);
server.start();
server.join();
The reason for this is XmlRpcServlet.server is not instansiated until init has been \
invoked and Jetty doesn't invoke the init method until startup (i.e. during \
doStart(...)). The following line is in XmlRpcServlet.init(...)
server = newXmlRpcServer(pConfig);
And even though the newXmlRpcServer takes ServletConfig it is not used:
protected XmlRpcServletServer newXmlRpcServer(ServletConfig pConfig)
throws XmlRpcException {
return new XmlRpcServletServer();
}
Also not that AuthenticationHandler, RequestProcessorFactoryFactory and \
TypeConverterFactory must have been set prior to \
newXmlRpcHandlerMapping/newPropertyHandlerMapping being called since the \
XmlRpcHandlerMapping must use those explicitly configured.
So, to sum it up:
1) server has not been instansiated by init being called when the setters for \
AuthenticationHandler, RequestProcessorFactoryFactory and TypeConverterFactory are \
called
2) the XmlRpcServlet cannot call newXmlRpcHandlerMapping to set \
XmlRpcHandlerMappingon the XmlRpcServletServer (server) until AuthenticationHandler, \
RequestProcessorFactoryFactory and TypeConverterFactory have had a chance to be \
configured
A simply workaround for 1) would be to outside the XMLRPC library when using Jetty \
do:
1. context.start();
2. call setters on XmlRpcServlet
3. server.start();
Note: The problem specified in 2) still exists. A simple change would be to not call \
newXmlRpcHandlerMapping until the first call to doPost(...).
> XmlRpcServlet should allow for usage of AuthenticationHandler, \
> RequestProcessorFactoryFactory and TypeConverterFactory implementations to be \
> configurable
> ----------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: XMLRPC-117
> URL: http://issues.apache.org/jira/browse/XMLRPC-117
> Project: XML-RPC
> Issue Type: Improvement
> Reporter: Jimisola Laursen
> Attachments: XMLRPC-117.diff
>
>
> The XmlRpcServlet should have setters for
> - AuthenticationHandler
> - RequestProcessorFactoryFactory
> - TypeConverterFactory
> and it shall use this accordingly.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: \
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic