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 [EMAIL PROTECTED] 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


Reply via email to