Author: jochen
Date: Wed Sep 20 14:41:58 2006
New Revision: 448354

URL: http://svn.apache.org/viewvc?view=rev&rev=448354
Log:
Added support for void methods, if extensions are turned on.

Modified:
    webservices/xmlrpc/trunk/.classpath
    
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/TypeConverterFactoryImpl.java
    webservices/xmlrpc/trunk/pom.xml
    
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/AbstractReflectiveHandlerMapping.java
    
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/webserver/XmlRpcServlet.java
    webservices/xmlrpc/trunk/src/changes/changes.xml
    webservices/xmlrpc/trunk/tests/pom.xml
    
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/BaseTest.java
    
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/DynamicProxyTest.java
    
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/JiraTest.java
    
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/XmlRpcTestCase.java

Modified: webservices/xmlrpc/trunk/.classpath
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/.classpath?view=diff&rev=448354&r1=448353&r2=448354
==============================================================================
--- webservices/xmlrpc/trunk/.classpath (original)
+++ webservices/xmlrpc/trunk/.classpath Wed Sep 20 14:41:58 2006
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-       <classpathentry kind="src" output="common/target/classes" 
path="common/src/main/java"/>
-       <classpathentry kind="src" output="client/target/classes" 
path="client/src/main/java"/>
-       <classpathentry kind="src" output="server/target/classes" 
path="server/src/main/java"/>
-       <classpathentry kind="src" path="tests/src/test/java"/>
-       <classpathentry kind="src" path="tests/src/test/resources"/>
-       <classpathentry kind="con" 
path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-       <classpathentry kind="con" 
path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
-       <classpathentry kind="output" path="tests/target/test-classes"/>
+       <classpathentry path="common/src/main/java" 
output="common/target/classes" kind="src"/>
+       <classpathentry path="client/src/main/java" 
output="client/target/classes" kind="src"/>
+       <classpathentry path="server/src/main/java" 
output="server/target/classes" kind="src"/>
+       <classpathentry path="tests/src/test/java" kind="src"/>
+       <classpathentry path="tests/src/test/resources" kind="src"/>
+       <classpathentry path="org.eclipse.jdt.launching.JRE_CONTAINER" 
kind="con"/>
+       <classpathentry path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER" 
kind="con"/>
+       <classpathentry path="tests/target/test-classes" kind="output"/>
 </classpath>

Modified: 
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/TypeConverterFactoryImpl.java
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/TypeConverterFactoryImpl.java?view=diff&rev=448354&r1=448353&r2=448354
==============================================================================
--- 
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/TypeConverterFactoryImpl.java
 (original)
+++ 
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/TypeConverterFactoryImpl.java
 Wed Sep 20 14:41:58 2006
@@ -103,6 +103,7 @@
         }
     }
 
+    private static final TypeConverter voidTypeConverter = new 
IdentityTypeConverter(void.class);
     private static final TypeConverter mapTypeConverter = new 
IdentityTypeConverter(Map.class);
     private static final TypeConverter objectArrayTypeConverter = new 
IdentityTypeConverter(Object[].class);
     private static final TypeConverter byteArrayTypeConverter = new 
IdentityTypeConverter(byte[].class);
@@ -196,6 +197,9 @@
     /** Returns a type converter for the given class.
      */
     public TypeConverter getTypeConverter(Class pClass) {
+        if (void.class.equals(pClass)) {
+            return voidTypeConverter;
+        }
         if (pClass.isAssignableFrom(boolean.class)) {
             return primitiveBooleanTypeConverter;
         }

Modified: webservices/xmlrpc/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/pom.xml?view=diff&rev=448354&r1=448353&r2=448354
==============================================================================
--- webservices/xmlrpc/trunk/pom.xml (original)
+++ webservices/xmlrpc/trunk/pom.xml Wed Sep 20 14:41:58 2006
@@ -234,6 +234,12 @@
                 <groupId>commons-logging</groupId>
                 <artifactId>commons-logging</artifactId>
                 <version>1.1</version>
+                <exclusions>
+                  <exclusion>
+                    <groupId>avalon-framework</groupId>
+                    <artifactId>avalon-framework</artifactId>
+                  </exclusion>
+                </exclusions>
             </dependency>
             <dependency>
                 <groupId>javax.servlet</groupId>

Modified: 
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/AbstractReflectiveHandlerMapping.java
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/AbstractReflectiveHandlerMapping.java?view=diff&rev=448354&r1=448353&r2=448354
==============================================================================
--- 
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/AbstractReflectiveHandlerMapping.java
 (original)
+++ 
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/AbstractReflectiveHandlerMapping.java
 Wed Sep 20 14:41:58 2006
@@ -55,6 +55,7 @@
     protected Map handlerMap = new HashMap();
     private AuthenticationHandler authenticationHandler;
     private RequestProcessorFactoryFactory requestProcessorFactoryFactory = 
new RequestProcessorFactoryFactory.RequestSpecificProcessorFactoryFactory();
+    private boolean voidMethodEnabled;
 
     /**
      * Sets the mappings [EMAIL PROTECTED] TypeConverterFactory}.
@@ -124,7 +125,7 @@
             if (Modifier.isStatic(method.getModifiers())) {
                 continue;  // Ignore methods, which are static
             }
-            if (method.getReturnType() == void.class) {
+            if (!isVoidMethodEnabled()  &&  method.getReturnType() == 
void.class) {
                 continue;  // Ignore void methods.
             }
             if (method.getDeclaringClass() == Object.class) {
@@ -225,4 +226,22 @@
                throw new XmlRpcNoSuchHandlerException("No metadata available 
for method: "
                                + pHandlerName);
        }
+
+    /**
+     * Returns, whether void methods are enabled. By default, null values
+     * aren't supported by XML-RPC and void methods are in fact returning
+     * null (at least from the perspective of reflection).
+     */
+    public boolean isVoidMethodEnabled() {
+        return voidMethodEnabled;
+    }
+
+    /**
+     * Sets, whether void methods are enabled. By default, null values
+     * aren't supported by XML-RPC and void methods are in fact returning
+     * null (at least from the perspective of reflection).
+     */
+    public void setVoidMethodEnabled(boolean pVoidMethodEnabled) {
+        voidMethodEnabled = pVoidMethodEnabled;
+    }
 }

Modified: 
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/webserver/XmlRpcServlet.java
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/webserver/XmlRpcServlet.java?view=diff&rev=448354&r1=448353&r2=448354
==============================================================================
--- 
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/webserver/XmlRpcServlet.java
 (original)
+++ 
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/webserver/XmlRpcServlet.java
 Wed Sep 20 14:41:58 2006
@@ -62,12 +62,12 @@
                super.init(pConfig);
                try {
                        server = newXmlRpcServer(pConfig);
-                       server.setHandlerMapping(newXmlRpcHandlerMapping());
             String enabledForExtensionsParam = 
pConfig.getInitParameter("enabledForExtensions");
             if (enabledForExtensionsParam != null) {
                 boolean b = 
Boolean.valueOf(enabledForExtensionsParam).booleanValue();
                 ((XmlRpcServerConfigImpl) 
server.getConfig()).setEnabledForExtensions(b);
             }
+                       server.setHandlerMapping(newXmlRpcHandlerMapping());
         } catch (XmlRpcException e) {
                        try {
                                log("Failed to create XmlRpcServer: " + 
e.getMessage(), e);
@@ -110,6 +110,7 @@
         PropertyHandlerMapping mapping = new PropertyHandlerMapping();
         mapping.setTypeConverterFactory(server.getTypeConverterFactory());
         mapping.load(Thread.currentThread().getContextClassLoader(), url);
+        
mapping.setVoidMethodEnabled(server.getConfig().isEnabledForExtensions());
         return mapping;
        }
 

Modified: webservices/xmlrpc/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/src/changes/changes.xml?view=diff&rev=448354&r1=448353&r2=448354
==============================================================================
--- webservices/xmlrpc/trunk/src/changes/changes.xml (original)
+++ webservices/xmlrpc/trunk/src/changes/changes.xml Wed Sep 20 14:41:58 2006
@@ -6,6 +6,9 @@
     <release version="3.1-SNAPSHOT" date="Not yet released">

       <action dev="jochen" type="add">

         Introduced the "enabledForExceptions" property.

+      </action>
+      <action dev="jochen" type="add">
+        Added support for void methods, if extensions are turned on.
       </action>

     </release>

     <release version="3.0.1-SNAPSHOT" date="Not yet released">


Modified: webservices/xmlrpc/trunk/tests/pom.xml
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/tests/pom.xml?view=diff&rev=448354&r1=448353&r2=448354
==============================================================================
--- webservices/xmlrpc/trunk/tests/pom.xml (original)
+++ webservices/xmlrpc/trunk/tests/pom.xml Wed Sep 20 14:41:58 2006
@@ -59,5 +59,9 @@
       <artifactId>commons-httpclient</artifactId>

       <scope>test</scope>

     </dependency>

+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>servlet-api</artifactId>
+    </dependency>
   </dependencies>

 </project>


Modified: 
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/BaseTest.java
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/BaseTest.java?view=diff&rev=448354&r1=448353&r2=448354
==============================================================================
--- 
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/BaseTest.java
 (original)
+++ 
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/BaseTest.java
 Wed Sep 20 14:41:58 2006
@@ -26,6 +26,7 @@
 import java.util.Map;
 import java.util.TimeZone;
 
+import javax.servlet.ServletException;
 import javax.xml.namespace.QName;
 import javax.xml.parsers.DocumentBuilderFactory;
 

Modified: 
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/DynamicProxyTest.java
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/DynamicProxyTest.java?view=diff&rev=448354&r1=448353&r2=448354
==============================================================================
--- 
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/DynamicProxyTest.java
 (original)
+++ 
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/DynamicProxyTest.java
 Wed Sep 20 14:41:58 2006
@@ -39,6 +39,12 @@
          * Throws a SAXException.
          */
         public Object parse(String pMessage) throws SAXException;
+
+        /**
+         * A void method; these are disabled without support for
+         * extensions, but enabled when extensions are on.
+         */
+        public void ping();
     }
 
     /** Implementation of [EMAIL PROTECTED] DynamicProxyTest.Adder}, which is 
used by
@@ -51,6 +57,8 @@
         public Object parse(String pMessage) throws SAXException {
             throw new SAXException("Failed to parse message: " + pMessage);
         }
+        public void ping() {
+        }
     }
 
     protected XmlRpcHandlerMapping getHandlerMapping() throws IOException, 
XmlRpcException {
@@ -102,5 +110,20 @@
         } catch (SAXException e) {
             // Ok
         }
+    }
+
+    /**
+     * Tests invoking a "void" method.
+     */
+    public void testVoidMethod() throws Exception {
+        for (int i = 0;   i < providers.length;  i++) {
+            testVoidMethod(providers[i]);
+        }
+    }
+
+    private void testVoidMethod(ClientProvider pProvider) throws Exception {
+        ClientFactory factory = getExClientFactory(pProvider);
+        Adder adder = (Adder) factory.newInstance(Adder.class);
+        adder.ping();
     }
 }

Modified: 
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/JiraTest.java
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/JiraTest.java?view=diff&rev=448354&r1=448353&r2=448354
==============================================================================
--- 
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/JiraTest.java
 (original)
+++ 
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/JiraTest.java
 Wed Sep 20 14:41:58 2006
@@ -29,7 +29,6 @@
 import java.util.Properties;
 import java.util.Vector;
 
-import org.apache.log4j.BasicConfigurator;
 import org.apache.xmlrpc.XmlRpcException;
 import org.apache.xmlrpc.client.XmlRpcClient;
 import org.apache.xmlrpc.client.XmlRpcHttpClientConfig;
@@ -289,6 +288,10 @@
         }
     }
 
+    /**
+     * Test case for <a href="http://issues.apache.org/jira/browse/XMLRPC-115";>
+     * XMLRPC-115</a>
+     */
     public void testXMLRPC115() throws Exception {
         for (int i = 0;  i < providers.length;  i++) {
             testXMLRPC115(providers[i]);

Modified: 
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/XmlRpcTestCase.java
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/XmlRpcTestCase.java?view=diff&rev=448354&r1=448353&r2=448354
==============================================================================
--- 
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/XmlRpcTestCase.java
 (original)
+++ 
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/XmlRpcTestCase.java
 Wed Sep 20 14:41:58 2006
@@ -58,12 +58,13 @@
 
     protected XmlRpcHandlerMapping getHandlerMapping(String pResource) throws 
IOException, XmlRpcException {
         PropertyHandlerMapping mapping = new PropertyHandlerMapping();
+        mapping.setVoidMethodEnabled(true);
         mapping.load(getClass().getClassLoader(), 
getClass().getResource(pResource));
         mapping.setTypeConverterFactory(getTypeConverterFactory());
         return mapping;
     }
 
-    protected ClientProvider[] initProviders(XmlRpcHandlerMapping pMapping) 
throws ServletException, IOException {
+    protected final ClientProvider[] initProviders(XmlRpcHandlerMapping 
pMapping) throws ServletException, IOException {
         return new ClientProvider[]{
                 new LocalTransportProvider(pMapping),
                 new LocalStreamTransportProvider(pMapping),


Reply via email to