You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xmlrpc-dev@ws.apache.org by jo...@apache.org on 2006/05/12 22:34:09 UTC
svn commit: r405863 - in /webservices/xmlrpc/trunk:
server/src/main/java/org/apache/xmlrpc/server/PropertyHandlerMapping.java
src/changes/changes.xml src/site/fml/faq.fml
Author: jochen
Date: Fri May 12 13:34:09 2006
New Revision: 405863
URL: http://svn.apache.org/viewcvs?rev=405863&view=rev
Log:
Added support for initializable handlers, as suggested by Marc Petrovic.
Modified:
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/PropertyHandlerMapping.java
webservices/xmlrpc/trunk/src/changes/changes.xml
webservices/xmlrpc/trunk/src/site/fml/faq.fml
Modified: webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/PropertyHandlerMapping.java
URL: http://svn.apache.org/viewcvs/webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/PropertyHandlerMapping.java?rev=405863&r1=405862&r2=405863&view=diff
==============================================================================
--- webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/PropertyHandlerMapping.java (original)
+++ webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/PropertyHandlerMapping.java Fri May 12 13:34:09 2006
@@ -78,25 +78,29 @@
Map.Entry entry = (Map.Entry) iter.next();
String key = (String) entry.getKey();
String value = (String) entry.getValue();
- final Class c;
- try {
- c = pClassLoader.loadClass(value);
- } catch (ClassNotFoundException e) {
- throw new XmlRpcException("Unable to load class: " + value, e);
- }
- if (c == null) {
- throw new XmlRpcException(0, "Loading class " + value + " returned null.");
- }
- final Object o;
- try {
- o = c.newInstance();
- } catch (InstantiationException e) {
- throw new XmlRpcException("Failed to instantiate class " + c.getName(), e);
- } catch (IllegalAccessException e) {
- throw new XmlRpcException("Illegal access when instantiating class " + c.getName(), e);
- }
- registerPublicMethods(map, key, c, o);
+ Object o = newHandlerObject(pClassLoader, value);
+ registerPublicMethods(map, key, o.getClass(), o);
}
return map;
+ }
+
+ protected Object newHandlerObject(ClassLoader pClassLoader, String pClassName)
+ throws XmlRpcException {
+ final Class c;
+ try {
+ c = pClassLoader.loadClass(pClassName);
+ } catch (ClassNotFoundException e) {
+ throw new XmlRpcException("Unable to load class: " + pClassName, e);
+ }
+ if (c == null) {
+ throw new XmlRpcException(0, "Loading class " + pClassName + " returned null.");
+ }
+ try {
+ return c.newInstance();
+ } catch (InstantiationException e) {
+ throw new XmlRpcException("Failed to instantiate class " + c.getName(), e);
+ } catch (IllegalAccessException e) {
+ throw new XmlRpcException("Illegal access when instantiating class " + c.getName(), e);
+ }
}
}
Modified: webservices/xmlrpc/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewcvs/webservices/xmlrpc/trunk/src/changes/changes.xml?rev=405863&r1=405862&r2=405863&view=diff
==============================================================================
--- webservices/xmlrpc/trunk/src/changes/changes.xml (original)
+++ webservices/xmlrpc/trunk/src/changes/changes.xml Fri May 12 13:34:09 2006
@@ -49,6 +49,10 @@
doesn't support HTTP/1.1, so it refuses the "contentLengthOptional"
setting from now on.
</action>
+ <action dev="jochen" type="enhancement" due-to="Marc Petrovic"
+ due-to-email="mspetrovic@gmail.com">
+ Added support for initializable handlers.
+ </action>
</release>
<release version="3.0a1" date="17-Feb-2005">
<action dev="jochen" type="enhancement">
Modified: webservices/xmlrpc/trunk/src/site/fml/faq.fml
URL: http://svn.apache.org/viewcvs/webservices/xmlrpc/trunk/src/site/fml/faq.fml?rev=405863&r1=405862&r2=405863&view=diff
==============================================================================
--- webservices/xmlrpc/trunk/src/site/fml/faq.fml (original)
+++ webservices/xmlrpc/trunk/src/site/fml/faq.fml Fri May 12 13:34:09 2006
@@ -98,5 +98,38 @@
</ul>
</answer>
</faq>
+
+ <faq id="handler_initialization">
+ <question>How do I initalize the handler objects?</question>
+ <answer>
+ <p>The PropertyHandlerMapping assumes, that handlers are POJO's
+ (plain old java objects). However, this is not always desirable.
+ For example, sometimes it is assumes that handlers need to
+ be initialized by the servlet, which is configured through
+ parameters.</p>
+ <p>The recommended solution is to create a subclass of the
+ XmlRpcServlet, which in turn uses a subclass of the
+ PropertyHandlerMapping:</p>
+ <source><![CDATA[
+public interface InitializableHandler {
+ void init(HttpServlet pServlet) throws XmlRpcException;
+}
+
+public class MyXmlRpcServlet extends XmlRpcServlet {
+ protected PropertyHandlerMapping newPropertyHandlerMapping(URL url) throws IOException, XmlRpcException {
+ return new PropertyHandlerMapping(getClass().getClassLoader(), url){
+ protected Object newHandlerObject(ClassLoader pClassLoader, String pClassName)
+ throws XmlRpcException {
+ Object o = super.newHandlerObject(pClassLoader, pClassName);
+ ((InitializableHandler) o).init(MyXmlRpcServlet.this);
+ return o;
+ }
+ };
+ }
+
+}
+ ]]></source>
+ </answer>
+ </faq>
</part>
</faqs>