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),