You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xmlrpc-auto@ws.apache.org by jo...@apache.org on 2006/09/20 23:41:59 UTC

svn commit: r448354 - in /webservices/xmlrpc/trunk: ./ common/src/main/java/org/apache/xmlrpc/common/ server/src/main/java/org/apache/xmlrpc/server/ server/src/main/java/org/apache/xmlrpc/webserver/ src/changes/ tests/ tests/src/test/java/org/apache/xm...

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 {@link 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 {@link 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),