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]);
+       }
+}


Reply via email to