You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xmlrpc-dev@ws.apache.org by jo...@apache.org on 2005/05/21 23:23:52 UTC
cvs commit: ws-xmlrpc/src/java/org/apache/xmlrpc/common TypeFactoryImpl.java
jochen 2005/05/21 14:23:52
Modified: src/java/org/apache/xmlrpc/parser Tag: b20050512_streaming
TypeParserImpl.java RecursiveTypeParserImpl.java
src/test/org/apache/xmlrpc/test Tag: b20050512_streaming
BaseTest.java
src/java/org/apache/xmlrpc/common Tag: b20050512_streaming
TypeFactoryImpl.java
Added: src/java/org/apache/xmlrpc/parser Tag: b20050512_streaming
ExtParser.java NodeParser.java
src/java/org/apache/xmlrpc/serializer Tag:
b20050512_streaming NodeSerializer.java
ExtSerializer.java
Removed: src/test/org/apache/xmlrpc/test Tag: b20050512_streaming
MiniTest.java
Log:
Added support for DOM documents.
Revision Changes Path
No revision
No revision
1.1.2.2 +1 -1 ws-xmlrpc/src/java/org/apache/xmlrpc/parser/Attic/TypeParserImpl.java
Index: TypeParserImpl.java
===================================================================
RCS file: /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/parser/Attic/TypeParserImpl.java,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- TypeParserImpl.java 12 May 2005 01:58:50 -0000 1.1.2.1
+++ TypeParserImpl.java 21 May 2005 21:23:51 -0000 1.1.2.2
@@ -64,7 +64,7 @@
public void startDocument() throws SAXException {
}
- protected boolean isEmpty(char[] pChars, int pStart, int pLength) {
+ protected static boolean isEmpty(char[] pChars, int pStart, int pLength) {
for (int i = 0; i < pLength; i++) {
if (!Character.isWhitespace(pChars[pStart+i])) {
return false;
1.1.2.3 +0 -1 ws-xmlrpc/src/java/org/apache/xmlrpc/parser/Attic/RecursiveTypeParserImpl.java
Index: RecursiveTypeParserImpl.java
===================================================================
RCS file: /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/parser/Attic/RecursiveTypeParserImpl.java,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -r1.1.2.2 -r1.1.2.3
--- RecursiveTypeParserImpl.java 13 May 2005 00:18:21 -0000 1.1.2.2
+++ RecursiveTypeParserImpl.java 21 May 2005 21:23:51 -0000 1.1.2.3
@@ -18,7 +18,6 @@
import javax.xml.namespace.QName;
import org.apache.ws.commons.util.NamespaceContextImpl;
-import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.common.TypeFactory;
import org.apache.xmlrpc.common.XmlRpcExtensionException;
import org.apache.xmlrpc.common.XmlRpcStreamConfig;
No revision
Index: RecursiveTypeParserImpl.java
===================================================================
RCS file: /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/parser/Attic/RecursiveTypeParserImpl.java,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -r1.1.2.2 -r1.1.2.3
--- RecursiveTypeParserImpl.java 13 May 2005 00:18:21 -0000 1.1.2.2
+++ RecursiveTypeParserImpl.java 21 May 2005 21:23:51 -0000 1.1.2.3
@@ -18,7 +18,6 @@
import javax.xml.namespace.QName;
import org.apache.ws.commons.util.NamespaceContextImpl;
-import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.common.TypeFactory;
import org.apache.xmlrpc.common.XmlRpcExtensionException;
import org.apache.xmlrpc.common.XmlRpcStreamConfig;
No revision
Index: RecursiveTypeParserImpl.java
===================================================================
RCS file: /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/parser/Attic/RecursiveTypeParserImpl.java,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -r1.1.2.2 -r1.1.2.3
--- RecursiveTypeParserImpl.java 13 May 2005 00:18:21 -0000 1.1.2.2
+++ RecursiveTypeParserImpl.java 21 May 2005 21:23:51 -0000 1.1.2.3
@@ -18,7 +18,6 @@
import javax.xml.namespace.QName;
import org.apache.ws.commons.util.NamespaceContextImpl;
-import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.common.TypeFactory;
import org.apache.xmlrpc.common.XmlRpcExtensionException;
import org.apache.xmlrpc.common.XmlRpcStreamConfig;
1.1.2.1 +157 -0 ws-xmlrpc/src/java/org/apache/xmlrpc/parser/Attic/ExtParser.java
1.1.2.1 +49 -0 ws-xmlrpc/src/java/org/apache/xmlrpc/parser/Attic/NodeParser.java
No revision
No revision
1.1.2.1 +41 -0 ws-xmlrpc/src/java/org/apache/xmlrpc/serializer/Attic/NodeSerializer.java
1.1.2.1 +43 -0 ws-xmlrpc/src/java/org/apache/xmlrpc/serializer/Attic/ExtSerializer.java
No revision
No revision
1.1.2.3 +83 -0 ws-xmlrpc/src/test/org/apache/xmlrpc/test/Attic/BaseTest.java
Index: BaseTest.java
===================================================================
RCS file: /home/cvs/ws-xmlrpc/src/test/org/apache/xmlrpc/test/Attic/BaseTest.java,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -r1.1.2.2 -r1.1.2.3
--- BaseTest.java 21 May 2005 02:37:08 -0000 1.1.2.2
+++ BaseTest.java 21 May 2005 21:23:51 -0000 1.1.2.3
@@ -16,6 +16,7 @@
package org.apache.xmlrpc.test;
import java.io.IOException;
+import java.io.StringReader;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Arrays;
@@ -23,6 +24,9 @@
import java.util.Iterator;
import java.util.Map;
+import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilderFactory;
+
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfig;
@@ -30,6 +34,10 @@
import org.apache.xmlrpc.common.XmlRpcExtensionException;
import org.apache.xmlrpc.server.PropertyHandlerMapping;
import org.apache.xmlrpc.server.XmlRpcHandlerMapping;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.xml.sax.InputSource;
import junit.framework.TestCase;
@@ -215,6 +223,40 @@
}
return result;
}
+ /** Returns the sum of all "int" nodes in <code>pNode</code>.
+ * @param pNode The node being counted.
+ * @return The sum of the values of all "int" nodes.
+ */
+ public int nodeParam(Node pNode) {
+ if (pNode.getNodeType() != Node.DOCUMENT_NODE) {
+ throw new IllegalStateException("Expected document node, got " + pNode);
+ }
+ Element e = ((Document) pNode).getDocumentElement();
+ if (!ROOT_TAG.equals(e.getLocalName()) || !INT_URI.equals(e.getNamespaceURI())) {
+ throw new IllegalStateException("Expected root element 'root', got "
+ + new QName(e.getNamespaceURI(), e.getLocalName()));
+ }
+ return count(pNode);
+ }
+ private int count(Node pNode) {
+ if (INT_TAG.equals(pNode.getLocalName()) && INT_URI.equals(pNode.getNamespaceURI())) {
+ StringBuffer sb = new StringBuffer();
+ for (Node child = pNode.getFirstChild(); child != null; child = child.getNextSibling()) {
+ if (child.getNodeType() == Node.TEXT_NODE || child.getNodeType() == Node.CDATA_SECTION_NODE) {
+ sb.append(child.getNodeValue());
+ }
+ }
+ return Integer.parseInt(sb.toString());
+ } else {
+ int result = 0;
+ for (Node child = pNode.getFirstChild(); child != null; child = child.getNextSibling()) {
+ if (child.getNodeType() == Node.ELEMENT_NODE) {
+ result += count(child);
+ }
+ }
+ return result;
+ }
+ }
}
protected XmlRpcHandlerMapping getHandlerMapping() throws IOException, XmlRpcException {
@@ -704,4 +746,45 @@
result = client.execute(getExConfig(pProvider), methodName, params);
checkMap((Map) result);
}
+
+ /** Test, whether we can invoke a method, passing a DOM
+ * node as parameter.
+ * @throws Exception The test failed.
+ */
+ public void testNodeParam() throws Exception {
+ for (int i = 0; i < providers.length; i++) {
+ testNodeParam(providers[i]);
+ }
+ }
+
+ private static final String ROOT_TAG = "root";
+ private static final String INT_TAG = "int";
+ private static final String INT_URI = "http://ws.apache.org/xmlrpc/namespaces/testNodeParam";
+
+ private void testNodeParam(ClientProvider pProvider) throws Exception {
+ final String xml =
+ "<" + ROOT_TAG + " xmlns='" + INT_URI +"'>" +
+ " <" + INT_TAG + ">1</" + INT_TAG + ">" +
+ " <" + INT_TAG + ">2</" + INT_TAG + ">" +
+ " <" + INT_TAG + ">3</" + INT_TAG + ">" +
+ " <" + INT_TAG + ">4</" + INT_TAG + ">" +
+ " <" + INT_TAG + ">5</" + INT_TAG + ">" +
+ "</" + ROOT_TAG + ">";
+ final String methodName = "Remote.nodeParam";
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ dbf.setValidating(false);
+ dbf.setNamespaceAware(true);
+ Document doc = dbf.newDocumentBuilder().parse(new InputSource(new StringReader(xml)));
+ final Object[] params = new Object[]{doc};
+ final XmlRpcClient client = pProvider.getClient();
+ Object result = client.execute(getExConfig(pProvider), methodName, params);
+ assertEquals(new Integer(1+2+3+4+5), result);
+ boolean ok = false;
+ try {
+ client.execute(getConfig(pProvider), methodName, params);
+ } catch (XmlRpcExtensionException e) {
+ ok = true;
+ }
+ assertTrue(ok);
+ }
}
No revision
No revision
1.1.2.4 +12 -0 ws-xmlrpc/src/java/org/apache/xmlrpc/common/Attic/TypeFactoryImpl.java
Index: TypeFactoryImpl.java
===================================================================
RCS file: /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/common/Attic/TypeFactoryImpl.java,v
retrieving revision 1.1.2.3
retrieving revision 1.1.2.4
diff -u -r1.1.2.3 -r1.1.2.4
--- TypeFactoryImpl.java 13 May 2005 21:06:37 -0000 1.1.2.3
+++ TypeFactoryImpl.java 21 May 2005 21:23:51 -0000 1.1.2.4
@@ -31,6 +31,7 @@
import org.apache.xmlrpc.parser.I4Parser;
import org.apache.xmlrpc.parser.I8Parser;
import org.apache.xmlrpc.parser.MapParser;
+import org.apache.xmlrpc.parser.NodeParser;
import org.apache.xmlrpc.parser.NullParser;
import org.apache.xmlrpc.parser.ObjectArrayParser;
import org.apache.xmlrpc.parser.TypeParser;
@@ -45,11 +46,13 @@
import org.apache.xmlrpc.serializer.I8Serializer;
import org.apache.xmlrpc.serializer.ListSerializer;
import org.apache.xmlrpc.serializer.MapSerializer;
+import org.apache.xmlrpc.serializer.NodeSerializer;
import org.apache.xmlrpc.serializer.NullSerializer;
import org.apache.xmlrpc.serializer.ObjectArraySerializer;
import org.apache.xmlrpc.serializer.StringSerializer;
import org.apache.xmlrpc.serializer.TypeSerializer;
import org.apache.xmlrpc.serializer.XmlRpcWriter;
+import org.w3c.dom.Node;
import org.xml.sax.SAXException;
@@ -66,6 +69,7 @@
private static final TypeSerializer SHORT_SERIALIZER = new I2Serializer();
private static final TypeSerializer LONG_SERIALIZER = new I8Serializer();
private static final TypeSerializer FLOAT_SERIALIZER = new FloatSerializer();
+ private static final TypeSerializer NODE_SERIALIZER = new NodeSerializer();
private final XmlRpcController controller;
@@ -133,6 +137,12 @@
return new ListSerializer(this, pConfig);
} else if (pObject instanceof Map) {
return new MapSerializer(this, pConfig);
+ } else if (pObject instanceof Node) {
+ if (pConfig.isEnabledForExtensions()) {
+ return NODE_SERIALIZER;
+ } else {
+ throw new SAXException(new XmlRpcExtensionException("DOM nodes aren't supported, if isEnabledForExtensions() == false"));
+ }
} else {
throw new SAXException("Unsupported Java type: " + pObject.getClass().getName());
}
@@ -153,6 +163,8 @@
return new I8Parser();
} else if (FloatSerializer.FLOAT_TAG.equals(pLocalName)) {
return new FloatParser();
+ } else if (NodeSerializer.DOM_TAG.equals(pLocalName)) {
+ return new NodeParser();
}
} else if ("".equals(pURI)) {
if (I4Serializer.INT_TAG.equals(pLocalName) || I4Serializer.I4_TAG.equals(pLocalName)) {