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