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)) {