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 22:27:29 UTC

svn commit: r448328 - in /webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH: server/src/main/java/org/apache/xmlrpc/server/ src/changes/ tests/src/test/java/org/apache/xmlrpc/test/ tests/src/test/resources/org/apache/xmlrpc/test/

Author: jochen
Date: Wed Sep 20 13:27:29 2006
New Revision: 448328

URL: http://svn.apache.org/viewvc?view=rev&rev=448328
Log:
An NPE was thrown, if the clients request didn't contain a "params" element.
PR: XMLRPC-115

Modified:
    webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/server/src/main/java/org/apache/xmlrpc/server/XmlRpcStreamServer.java
    webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/src/changes/changes.xml
    webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/tests/src/test/java/org/apache/xmlrpc/test/JiraTest.java
    webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/tests/src/test/java/org/apache/xmlrpc/test/ParserTest.java
    webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/tests/src/test/resources/org/apache/xmlrpc/test/JiraTest.properties

Modified: webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/server/src/main/java/org/apache/xmlrpc/server/XmlRpcStreamServer.java
URL: http://svn.apache.org/viewvc/webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/server/src/main/java/org/apache/xmlrpc/server/XmlRpcStreamServer.java?view=diff&rev=448328&r1=448327&r2=448328
==============================================================================
--- webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/server/src/main/java/org/apache/xmlrpc/server/XmlRpcStreamServer.java (original)
+++ webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/server/src/main/java/org/apache/xmlrpc/server/XmlRpcStreamServer.java Wed Sep 20 13:27:29 2006
@@ -71,7 +71,7 @@
 		return new XmlRpcRequest(){
 			public XmlRpcRequestConfig getConfig() { return pConfig; }
 			public String getMethodName() { return parser.getMethodName(); }
-			public int getParameterCount() { return params.size(); }
+			public int getParameterCount() { return params == null ? 0 : params.size(); }
 			public Object getParameter(int pIndex) { return params.get(pIndex); }
 		};
 	}

Modified: webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/src/changes/changes.xml?view=diff&rev=448328&r1=448327&r2=448328
==============================================================================
--- webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/src/changes/changes.xml (original)
+++ webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/src/changes/changes.xml Wed Sep 20 13:27:29 2006
@@ -28,6 +28,9 @@
         "Implementation-Vendor" and "Implementation-Version" are now
 		present in the MANIFEST files.
       </action>
+      <action dev="jochen" type="fix" issue="XMLRPC-115">
+        An NPE was thrown, if the clients request didn't contain a "params" element.
+      </action>
     </release>
     <release version="3.0" date="30-Aug-2006">
       <action dev="jochen" type="fix" due-to="Matt Preston"

Modified: webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/tests/src/test/java/org/apache/xmlrpc/test/JiraTest.java
URL: http://svn.apache.org/viewvc/webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/tests/src/test/java/org/apache/xmlrpc/test/JiraTest.java?view=diff&rev=448328&r1=448327&r2=448328
==============================================================================
--- webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/tests/src/test/java/org/apache/xmlrpc/test/JiraTest.java (original)
+++ webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/tests/src/test/java/org/apache/xmlrpc/test/JiraTest.java Wed Sep 20 13:27:29 2006
@@ -16,6 +16,12 @@
 package org.apache.xmlrpc.test;
 
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.net.HttpURLConnection;
+import java.net.URL;
 import java.util.Collections;
 import java.util.Hashtable;
 import java.util.Iterator;
@@ -23,10 +29,17 @@
 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;
 import org.apache.xmlrpc.client.util.ClientFactory;
+import org.apache.xmlrpc.common.XmlRpcStreamRequestConfig;
+import org.apache.xmlrpc.parser.XmlRpcResponseParser;
 import org.apache.xmlrpc.server.XmlRpcHandlerMapping;
+import org.apache.xmlrpc.util.SAXParsers;
+import org.xml.sax.InputSource;
+import org.xml.sax.XMLReader;
 
 
 /**
@@ -261,6 +274,51 @@
             } catch (XmlRpcException e) {
                 assertEquals(i, e.code);
             }
+        }
+    }
+
+    /**
+     * Handler for {@link JiraTest#testXMLRPC115()}
+     */
+    public static class XMLRPC115Handler {
+        /**
+         * Does nothing, just for checking, whether the server is alive.
+         */
+        public Object[] ping() {
+            return new Object[0];
+        }
+    }
+
+    public void testXMLRPC115() throws Exception {
+        for (int i = 0;  i < providers.length;  i++) {
+            testXMLRPC115(providers[i]);
+        }
+    }
+
+    private void testXMLRPC115(ClientProvider pProvider) throws Exception {
+        BasicConfigurator.configure();
+        if (pProvider instanceof SunHttpTransportProvider) {
+            XmlRpcClient client = pProvider.getClient();
+            client.setConfig(getConfig(pProvider));
+            URL url = ((XmlRpcHttpClientConfig) client.getConfig()).getServerURL();
+            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+            conn.setDoInput(true);
+            conn.setDoOutput(true);
+            conn.setRequestMethod("POST");
+            conn.setRequestProperty("content-type", "text/xml");
+            OutputStream ostream = conn.getOutputStream();
+            Writer w = new OutputStreamWriter(ostream, "UTF-8");
+            w.write("<methodCall><methodName>" + XMLRPC115Handler.class.getName() + ".ping"
+                    + "</methodName></methodCall>");
+            w.close();
+            InputStream istream = conn.getInputStream();
+            XmlRpcResponseParser parser = new XmlRpcResponseParser((XmlRpcStreamRequestConfig) client.getClientConfig(), client.getTypeFactory());
+            XMLReader xr = SAXParsers.newXMLReader();
+            xr.setContentHandler(parser);
+            xr.parse(new InputSource(istream));
+            istream.close();
+            assertTrue(parser.getResult() instanceof Object[]);
+            assertEquals(0, ((Object[]) parser.getResult()).length);
         }
     }
 }

Modified: webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/tests/src/test/java/org/apache/xmlrpc/test/ParserTest.java
URL: http://svn.apache.org/viewvc/webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/tests/src/test/java/org/apache/xmlrpc/test/ParserTest.java?view=diff&rev=448328&r1=448327&r2=448328
==============================================================================
--- webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/tests/src/test/java/org/apache/xmlrpc/test/ParserTest.java (original)
+++ webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/tests/src/test/java/org/apache/xmlrpc/test/ParserTest.java Wed Sep 20 13:27:29 2006
@@ -8,33 +8,41 @@
 import org.apache.xmlrpc.XmlRpcException;
 import org.apache.xmlrpc.client.XmlRpcClient;
 import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
+import org.apache.xmlrpc.common.XmlRpcHttpRequestConfigImpl;
+import org.apache.xmlrpc.common.XmlRpcStreamConfig;
 import org.apache.xmlrpc.common.XmlRpcStreamRequestConfig;
+import org.apache.xmlrpc.parser.XmlRpcRequestParser;
 import org.apache.xmlrpc.parser.XmlRpcResponseParser;
 import org.apache.xmlrpc.util.SAXParsers;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
 import org.xml.sax.XMLReader;
 
 
 /** Test for the various parsers.
  */
 public class ParserTest extends TestCase {
-	private Object parseResponse(final String s) throws XmlRpcException, IOException, SAXException, SAXParseException {
+	private Object parseResponse(final String s) throws XmlRpcException, IOException, SAXException {
 		XmlRpcStreamRequestConfig config = new XmlRpcClientConfigImpl();
 		XmlRpcClient client = new XmlRpcClient();
 		XmlRpcResponseParser parser = new XmlRpcResponseParser(config, client.getTypeFactory());
 		XMLReader xr = SAXParsers.newXMLReader();
 		xr.setContentHandler(parser);
-		try {
-			xr.parse(new InputSource(new StringReader(s)));
-		} catch (SAXParseException e) {
-			throw e;
-		}
+		xr.parse(new InputSource(new StringReader(s)));
 		Object o = parser.getResult();
 		return o;
 	}
 
+    private XmlRpcRequestParser parseRequest(final String s) throws XmlRpcException, IOException, SAXException {
+        XmlRpcStreamConfig config = new XmlRpcHttpRequestConfigImpl();
+        XmlRpcClient client = new XmlRpcClient();
+        XmlRpcRequestParser parser = new XmlRpcRequestParser(config, client.getTypeFactory());
+        XMLReader xr = SAXParsers.newXMLReader();
+        xr.setContentHandler(parser);
+        xr.parse(new InputSource(new StringReader(s)));
+        return parser;
+    }
+
 	/** Tests, whether strings can be parsed with,
 	 * or without, the "string" tag.
 	 */
@@ -76,4 +84,28 @@
 		assertEquals("array", inner[0]);
 		assertEquals("string", inner[1]);
 	}
+
+	/**
+     * Tests, whether a request may omit the <params> tag.
+	 */
+    public void testOptionalParams() throws Exception {
+        final String s1 = "<methodResponse/>";
+        Object o1 = parseResponse(s1);
+        assertNull(o1);
+
+        final String s2 = "<methodResponse><params/></methodResponse>";
+        Object o2 = parseResponse(s2);
+        assertNull(o2);
+
+        final String s3 = "<methodCall><methodName>foo</methodName></methodCall>";
+        XmlRpcRequestParser p3 = parseRequest(s3);
+        assertEquals("foo", p3.getMethodName());
+        assertNull(p3.getParams());
+
+        final String s4 = "<methodCall><methodName>bar</methodName><params/></methodCall>";
+        XmlRpcRequestParser p4 = parseRequest(s4);
+        assertEquals("bar", p4.getMethodName());
+        assertNotNull(p4.getParams());
+        assertTrue(p4.getParams().size() == 0);
+    }
 }

Modified: webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/tests/src/test/resources/org/apache/xmlrpc/test/JiraTest.properties
URL: http://svn.apache.org/viewvc/webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/tests/src/test/resources/org/apache/xmlrpc/test/JiraTest.properties?view=diff&rev=448328&r1=448327&r2=448328
==============================================================================
--- webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/tests/src/test/resources/org/apache/xmlrpc/test/JiraTest.properties (original)
+++ webservices/xmlrpc/branches/XMLRPC_3_0_BRANCH/tests/src/test/resources/org/apache/xmlrpc/test/JiraTest.properties Wed Sep 20 13:27:29 2006
@@ -1,3 +1,4 @@
 org.apache.xmlrpc.test.JiraTest$XMLRPC89Handler=org.apache.xmlrpc.test.JiraTest$XMLRPC89HandlerImpl
 org.apache.xmlrpc.test.JiraTest$XMLRPC96Handler=org.apache.xmlrpc.test.JiraTest$XMLRPC96Handler
 org.apache.xmlrpc.test.JiraTest$XMLRPC113Handler=org.apache.xmlrpc.test.JiraTest$XMLRPC113HandlerImpl
+org.apache.xmlrpc.test.JiraTest$XMLRPC115Handler=org.apache.xmlrpc.test.JiraTest$XMLRPC115Handler