Author: jochen
Date: Thu Feb 23 14:35:40 2006
New Revision: 380254
URL: http://svn.apache.org/viewcvs?rev=380254&view=rev
Log:
Nested object arrays could not be parsed.
The "string" tag could not be parsed.
Added:
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/StringParser.java
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/util/SAXParsers.java
webservices/xmlrpc/trunk/src/changes/
webservices/xmlrpc/trunk/src/changes/changes.xml
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/ParserTest.java
Modified:
webservices/xmlrpc/trunk/.classpath
webservices/xmlrpc/trunk/.project
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcStreamTransport.java
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/TypeFactoryImpl.java
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/ObjectArrayParser.java
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/serializer/StringSerializer.java
webservices/xmlrpc/trunk/pom.xml
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/XmlRpcStreamServer.java
Modified: webservices/xmlrpc/trunk/.classpath
URL:
http://svn.apache.org/viewcvs/webservices/xmlrpc/trunk/.classpath?rev=380254&r1=380253&r2=380254&view=diff
==============================================================================
--- webservices/xmlrpc/trunk/.classpath (original)
+++ webservices/xmlrpc/trunk/.classpath Thu Feb 23 14:35:40 2006
@@ -4,7 +4,7 @@
<classpathentry kind="src" path="client/src/main/java"/>
<classpathentry kind="src" path="server/src/main/java"/>
<classpathentry kind="src" path="tests/src/test/java"/>
- <classpathentry output="tests/src/test/resources" kind="src"
path="tests/src/test/resources"/>
+ <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="target/classes"/>
Modified: webservices/xmlrpc/trunk/.project
URL:
http://svn.apache.org/viewcvs/webservices/xmlrpc/trunk/.project?rev=380254&r1=380253&r2=380254&view=diff
==============================================================================
--- webservices/xmlrpc/trunk/.project (original)
+++ webservices/xmlrpc/trunk/.project Thu Feb 23 14:35:40 2006
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
- <name>ws-xmlrpc-3</name>
+ <name>ws-xmlrpc</name>
<comment>Apache XML-RPC is a Java implementation of XML-RPC, a popular
protocol
that uses XML over HTTP to implement remote procedure calls.
Compared to SOAP, or JAX-RPC, it is stable, much simpler and easier to
Modified:
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcStreamTransport.java
URL:
http://svn.apache.org/viewcvs/webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcStreamTransport.java?rev=380254&r1=380253&r2=380254&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcStreamTransport.java
(original)
+++
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/XmlRpcStreamTransport.java
Thu Feb 23 14:35:40 2006
@@ -15,7 +15,6 @@
*/
package org.apache.xmlrpc.client;
-import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -32,6 +31,7 @@
import org.apache.xmlrpc.common.XmlRpcStreamRequestConfig;
import org.apache.xmlrpc.parser.XmlRpcResponseParser;
import org.apache.xmlrpc.serializer.XmlRpcWriter;
+import org.apache.xmlrpc.util.SAXParsers;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -43,13 +43,6 @@
* the response,
*/
public abstract class XmlRpcStreamTransport extends XmlRpcTransportImpl {
- private static final SAXParserFactory spf;
- static {
- spf = SAXParserFactory.newInstance();
- spf.setNamespaceAware(true);
- spf.setValidating(false);
- }
-
/** Creates a new instance on behalf of the given client.
*/
protected XmlRpcStreamTransport(XmlRpcClient pClient) {
@@ -228,14 +221,8 @@
}
}
- protected XMLReader newXMLReader() throws XmlRpcClientException {
- try {
- return spf.newSAXParser().getXMLReader();
- } catch (ParserConfigurationException e) {
- throw new XmlRpcClientException("Failed to create
XMLReader: " + e.getMessage(), e);
- } catch (SAXException e) {
- throw new XmlRpcClientException("Failed to create
XMLReader: " + e.getMessage(), e);
- }
+ protected XMLReader newXMLReader() throws XmlRpcException {
+ return SAXParsers.newXMLReader();
}
protected Object readResponse(XmlRpcStreamRequestConfig pConfig,
InputStream pStream) throws XmlRpcException {
Modified:
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/TypeFactoryImpl.java
URL:
http://svn.apache.org/viewcvs/webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/TypeFactoryImpl.java?rev=380254&r1=380253&r2=380254&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/TypeFactoryImpl.java
(original)
+++
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/TypeFactoryImpl.java
Thu Feb 23 14:35:40 2006
@@ -35,6 +35,7 @@
import org.apache.xmlrpc.parser.NullParser;
import org.apache.xmlrpc.parser.ObjectArrayParser;
import org.apache.xmlrpc.parser.SerializableParser;
+import org.apache.xmlrpc.parser.StringParser;
import org.apache.xmlrpc.parser.TypeParser;
import org.apache.xmlrpc.serializer.BooleanSerializer;
import org.apache.xmlrpc.serializer.ByteArraySerializer;
@@ -192,6 +193,8 @@
return new MapParser(pConfig, pContext, this);
} else if
(ByteArraySerializer.BASE_64_TAG.equals(pLocalName)) {
return new ByteArrayParser();
+ } else if
(StringSerializer.STRING_TAG.equals(pLocalName)) {
+ return new StringParser();
}
}
return null;
Modified:
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/ObjectArrayParser.java
URL:
http://svn.apache.org/viewcvs/webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/ObjectArrayParser.java?rev=380254&r1=380253&r2=380254&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/ObjectArrayParser.java
(original)
+++
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/ObjectArrayParser.java
Thu Feb 23 14:35:40 2006
@@ -97,7 +97,7 @@
}
startValueTag();
break;
- case 3:
+ default:
super.startElement(pURI, pLocalName, pQName,
pAttrs);
break;
}
Added:
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/StringParser.java
URL:
http://svn.apache.org/viewcvs/webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/StringParser.java?rev=380254&view=auto
==============================================================================
---
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/StringParser.java
(added)
+++
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/StringParser.java
Thu Feb 23 14:35:40 2006
@@ -0,0 +1,13 @@
+package org.apache.xmlrpc.parser;
+
+import org.xml.sax.SAXException;
+
+
+/** Parser implementation for parsing a string.
+ */
+public class StringParser extends AtomicParser {
+ protected void setResult(String pResult) throws SAXException {
+ super.setResult((Object) pResult);
+ }
+
+}
Modified:
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/serializer/StringSerializer.java
URL:
http://svn.apache.org/viewcvs/webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/serializer/StringSerializer.java?rev=380254&r1=380253&r2=380254&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/serializer/StringSerializer.java
(original)
+++
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/serializer/StringSerializer.java
Thu Feb 23 14:35:40 2006
@@ -22,6 +22,10 @@
/** A [EMAIL PROTECTED] TypeSerializer} for strings.
*/
public class StringSerializer extends TypeSerializerImpl {
+ /** (Optional) Tag name of a string value.
+ */
+ public static final String STRING_TAG = "string";
+
public void write(ContentHandler pHandler, Object pObject) throws
SAXException {
write(pHandler, null, pObject.toString());
}
Added:
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/util/SAXParsers.java
URL:
http://svn.apache.org/viewcvs/webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/util/SAXParsers.java?rev=380254&view=auto
==============================================================================
---
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/util/SAXParsers.java
(added)
+++
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/util/SAXParsers.java
Thu Feb 23 14:35:40 2006
@@ -0,0 +1,32 @@
+package org.apache.xmlrpc.util;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.apache.xmlrpc.XmlRpcException;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+
+
+/** Utility class for working with SAX parsers.
+ */
+public class SAXParsers {
+ private static final SAXParserFactory spf;
+ static {
+ spf = SAXParserFactory.newInstance();
+ spf.setNamespaceAware(true);
+ spf.setValidating(false);
+ }
+
+ /** Creates a new instance of [EMAIL PROTECTED] XMLReader}.
+ */
+ public static XMLReader newXMLReader() throws XmlRpcException {
+ try {
+ return spf.newSAXParser().getXMLReader();
+ } catch (ParserConfigurationException e) {
+ throw new XmlRpcException("Unable to create XML parser:
" + e.getMessage(), e);
+ } catch (SAXException e) {
+ throw new XmlRpcException("Unable to create XML parser:
" + e.getMessage(), e);
+ }
+ }
+}
Modified: webservices/xmlrpc/trunk/pom.xml
URL:
http://svn.apache.org/viewcvs/webservices/xmlrpc/trunk/pom.xml?rev=380254&r1=380253&r2=380254&view=diff
==============================================================================
--- webservices/xmlrpc/trunk/pom.xml (original)
+++ webservices/xmlrpc/trunk/pom.xml Thu Feb 23 14:35:40 2006
@@ -114,6 +114,12 @@
<organization>Zenplex</organization>
</developer>
</developers>
+ <contributors>
+ <contributor>
+ <name>Walter Mundt</name>
+ <email>[EMAIL PROTECTED]</email>
+ </contributor>
+ </contributors>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
@@ -223,6 +229,10 @@
</dependencies>
<reporting>
<plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>changes-maven-plugin</artifactId>
+ </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
Modified:
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/XmlRpcStreamServer.java
URL:
http://svn.apache.org/viewcvs/webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/XmlRpcStreamServer.java?rev=380254&r1=380253&r2=380254&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/XmlRpcStreamServer.java
(original)
+++
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/server/XmlRpcStreamServer.java
Thu Feb 23 14:35:40 2006
@@ -23,9 +23,6 @@
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParserFactory;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.xmlrpc.XmlRpcException;
@@ -38,6 +35,7 @@
import org.apache.xmlrpc.serializer.DefaultXMLWriterFactory;
import org.apache.xmlrpc.serializer.XmlRpcWriter;
import org.apache.xmlrpc.serializer.XmlWriterFactory;
+import org.apache.xmlrpc.util.SAXParsers;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -51,25 +49,12 @@
public abstract class XmlRpcStreamServer extends XmlRpcServer
implements XmlRpcStreamRequestProcessor {
private static final Log log =
LogFactory.getLog(XmlRpcStreamServer.class);
- private static final SAXParserFactory spf;
private XmlWriterFactory writerFactory = new DefaultXMLWriterFactory();
- static {
- spf = SAXParserFactory.newInstance();
- spf.setNamespaceAware(true);
- spf.setValidating(false);
- }
protected XmlRpcRequest getRequest(final XmlRpcStreamRequestConfig
pConfig,
InputStream pStream) throws XmlRpcException {
final XmlRpcRequestParser parser = new
XmlRpcRequestParser(pConfig, getTypeFactory());
- final XMLReader xr;
- try {
- xr = spf.newSAXParser().getXMLReader();
- } catch (ParserConfigurationException e) {
- throw new XmlRpcException("Unable to create XML parser:
" + e.getMessage(), e);
- } catch (SAXException e) {
- throw new XmlRpcException("Unable to create XML parser:
" + e.getMessage(), e);
- }
+ final XMLReader xr = SAXParsers.newXMLReader();
xr.setContentHandler(parser);
try {
xr.parse(new InputSource(pStream));
Added: webservices/xmlrpc/trunk/src/changes/changes.xml
URL:
http://svn.apache.org/viewcvs/webservices/xmlrpc/trunk/src/changes/changes.xml?rev=380254&view=auto
==============================================================================
--- webservices/xmlrpc/trunk/src/changes/changes.xml (added)
+++ webservices/xmlrpc/trunk/src/changes/changes.xml Thu Feb 23 14:35:40 2006
@@ -0,0 +1,64 @@
+<document>
+ <properties>
+ <title>Changes in Apache XML-RPC</title>
+ </properties>
+ <body>
+ <release version="3.0-SNAPSHOT" date="Not yet released">
+ <action dev="jochen" type="fix" due-to="Walter Mundt"
+ due-to-email="[EMAIL PROTECTED]">
+ Nested object arrays could not be parsed.
+ </action>
+ <action dev="jochen" type="fix" due-to="Walter Mundt"
+ due-to-email="[EMAIL PROTECTED]">
+ The "string" tag could not be parsed.
+ </action>
+ <action dev="jochen" type="enhancement">
+ The project is now splitted into three jar files:
+ common, client, and server.
+ </action>
+ </release>
+ <release version="3.0a1" date="17-Feb-2005">
+ <action dev="jochen" type="enhancement">
+ Complete rewrite, adding vendor extensions:
+ Streaming mode, support for all primitive Java types,
+ nulls, DOM elements, and JAXB objects.
+ </action>
+ </release>
+ <release version="2.0.2" date="Not yet released">
+ <action dev="jochen" type="fix" issue="XMLRPC-67"
+ due-to="Mike Bailey" due-to-email="mike at blueoak.com">
+ A missing increment in LiteXmlRpcTransport.initConnection()
+ prevented, that the method could finally fail, resulting
+ in a never ending loop.
+ </action>
+ </release>
+ <release version="2.0.1" date="28-Dec-2005">
+ <action dev="jochen" type="fix" issue="XMLRPC-68"
+ due-to="Johan Oskarson" due-to-email="johan at oskarsson.nu">
+ The Webserver class was unable to handle basic authentication,
+ because the BASE64 codec wasn't initialized.
+ </action>
+ <action dev="jochen" type="fix" issue="XMLRPC-69"
+ due-to="Claude Zervas" due-to-email="claude at utlco.com">
+ The characters 0x20, 0xe000, and 0x10000 have been escaped
+ without reason.
+ </action>
+ <action dev="jochen" type="fix" issue="XMLRPC-73"
+ due-to="Thomas Mohaupt" due-to-email="Thomas.Mohaupt at
gmail.com">
+ The wrong version of commons-codec was downloaded by build.xml.
+ </action>
+ <action dev="jochen" type="enhancement"
+ due-to="Jimisola Laursen" due-to-email="[EMAIL PROTECTED]">
+ Added the CommonsXmlRpcTransportFactory.
+ </action>
+ <action dev="jochen" type="enhancement"
+ due-to="Henry Story" due-to-email="[EMAIL PROTECTED]">
+ Added the possibility to specify a timezone for interpreting
+ incoming date values.
+ </action>
+ <action dev="jochen" type="enhancement">
+ Upgrade to commons-httpclient 3.0.
+ </action>
+ </release>
+ </body>
+</document>
Added:
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/ParserTest.java
URL:
http://svn.apache.org/viewcvs/webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/ParserTest.java?rev=380254&view=auto
==============================================================================
---
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/ParserTest.java
(added)
+++
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/ParserTest.java
Thu Feb 23 14:35:40 2006
@@ -0,0 +1,79 @@
+package org.apache.xmlrpc.test;
+
+import java.io.IOException;
+import java.io.StringReader;
+
+import junit.framework.TestCase;
+
+import org.apache.xmlrpc.XmlRpcException;
+import org.apache.xmlrpc.client.XmlRpcClient;
+import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
+import org.apache.xmlrpc.common.XmlRpcStreamRequestConfig;
+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 {
+ 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;
+ }
+ Object o = parser.getResult();
+ return o;
+ }
+
+ /** Tests, whether strings can be parsed with,
+ * or without, the "string" tag.
+ */
+ public void testStringType() throws Exception {
+ final String[] strings = new String[]{
+ "3", "<string>3</string>",
+ " <string>3</string> "
+ };
+ for (int i = 0; i < strings.length; i++) {
+ final String s =
+ "<?xml version='1.0' encoding='UTF-8'?>\n"
+ + "<methodResponse><params><param>\n"
+ + "<value>" + strings[i] + "</value></param>\n"
+ + "</params></methodResponse>\n";
+ Object o = parseResponse(s);
+ assertEquals("3", o);
+ }
+ }
+
+ /** Tests, whether nested arrays can be parsed.
+ */
+ public void testNestedObjectArrays() throws Exception {
+ final String s =
+ "<?xml version='1.0' encoding='UTF-8'?>\n"
+ + "<methodResponse><params><param>\n"
+ + "<value><array><data><value><array>\n"
+ + "<data><value>array</value>\n"
+ + "<value>string</value></data></array>\n"
+ + "</value></data></array></value></param>\n"
+ + "</params></methodResponse>\n";
+ Object o = parseResponse(s);
+ assertTrue(o instanceof Object[]);
+ Object[] outer = (Object[]) o;
+ assertEquals(1, outer.length);
+ o = outer[0];
+ assertTrue(o instanceof Object[]);
+ Object[] inner = (Object[]) o;
+ assertEquals(2, inner.length);
+ assertEquals("array", inner[0]);
+ assertEquals("string", inner[1]);
+ }
+}