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/13 23:06:37 UTC

cvs commit: ws-xmlrpc/src/java/org/apache/xmlrpc/parser XmlRpcResponseParser.java

jochen      2005/05/13 14:06:37

  Modified:    src/java/org/apache/xmlrpc/client Tag: b20050512_streaming
                        XmlRpcStreamTransport.java XmlRpcHttpTransport.java
               src/java/org/apache/xmlrpc/serializer Tag:
                        b20050512_streaming XmlRpcWriter.java
                        I4Serializer.java I2Serializer.java
                        I1Serializer.java I8Serializer.java
               src/test/org/apache/xmlrpc/test Tag: b20050512_streaming
                        SerializerTest.java HttpTransportTest.java
               src/java/org/apache/xmlrpc/server Tag: b20050512_streaming
                        XmlRpcStreamServer.java
               src/java/org/apache/xmlrpc/webserver Tag:
                        b20050512_streaming WebServer.java
               src/java/org/apache/xmlrpc/common Tag: b20050512_streaming
                        TypeFactoryImpl.java
               src/java/org/apache/xmlrpc/parser Tag: b20050512_streaming
                        XmlRpcResponseParser.java
  Log:
  Webserver based unit tests are working.
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.1.2.3   +29 -3     ws-xmlrpc/src/java/org/apache/xmlrpc/client/Attic/XmlRpcStreamTransport.java
  
  Index: XmlRpcStreamTransport.java
  ===================================================================
  RCS file: /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/client/Attic/XmlRpcStreamTransport.java,v
  retrieving revision 1.1.2.2
  retrieving revision 1.1.2.3
  diff -u -r1.1.2.2 -r1.1.2.3
  --- XmlRpcStreamTransport.java	13 May 2005 00:18:21 -0000	1.1.2.2
  +++ XmlRpcStreamTransport.java	13 May 2005 21:06:37 -0000	1.1.2.3
  @@ -15,6 +15,8 @@
    */
   package org.apache.xmlrpc.client;
   
  +import java.io.ByteArrayInputStream;
  +import java.io.ByteArrayOutputStream;
   import java.io.IOException;
   import java.io.InputStream;
   import java.io.OutputStream;
  @@ -161,7 +163,7 @@
   		XmlRpcStreamRequestConfig config = (XmlRpcStreamRequestConfig) pRequest.getConfig();
   		Object connection = newConnection(config);
   		try {
  -			initConnection(config, pRequest);
  +			initConnection(config, connection);
   			OutputStream ostream = getOutputStream(config, connection);
   			try {
   				writeRequest(config, ostream, pRequest);
  @@ -198,18 +200,42 @@
   	}
   
   	protected Object readResponse(XmlRpcStreamRequestConfig pConfig, InputStream pStream) throws XmlRpcException {
  +		if (true) {
  +			ByteArrayOutputStream baos = new ByteArrayOutputStream();
  +			try {
  +				byte[] buffer = new byte[1024];
  +				for (;;) {
  +					int res = pStream.read(buffer);
  +					if (res == -1) {
  +						break;
  +					} else if (res > 0) {
  +						baos.write(buffer, 0, res);
  +					}
  +				}
  +			} catch (IOException e) {
  +				throw new XmlRpcClientException(e.getMessage(), e);
  +			}
  +			System.out.println("Input: " + new String(baos.toByteArray()));
  +			pStream = new ByteArrayInputStream(baos.toByteArray());
  +		}
  +
   		InputSource isource = new InputSource(pStream);
   		XMLReader xr = newXMLReader();
  +		XmlRpcResponseParser xp;
   		try {
  -			XmlRpcResponseParser xp = new XmlRpcResponseParser(pConfig, getClient().getTypeFactory());
  +			xp = new XmlRpcResponseParser(pConfig, getClient().getTypeFactory());
   			xr.setContentHandler(xp);
   			xr.parse(isource);
  -			return xp.getResult();
   		} catch (SAXException e) {
   			throw new XmlRpcClientException("Failed to parse servers response: " + e.getMessage(), e);
   		} catch (IOException e) {
   			throw new XmlRpcClientException("Failed to read servers response: " + e.getMessage(), e);
   		}
  +		if (xp.isSuccess()) {
  +			return xp.getResult();
  +		} else {
  +			throw new XmlRpcException(xp.getErrorCode(), xp.getErrorMessage());
  +		}
   	}
   
   	protected void writeRequest(XmlRpcStreamRequestConfig pConfig, OutputStream pStream, XmlRpcRequest pRequest)
  
  
  
  1.1.2.2   +5 -0      ws-xmlrpc/src/java/org/apache/xmlrpc/client/Attic/XmlRpcHttpTransport.java
  
  Index: XmlRpcHttpTransport.java
  ===================================================================
  RCS file: /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/client/Attic/XmlRpcHttpTransport.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- XmlRpcHttpTransport.java	12 May 2005 01:58:51 -0000	1.1.2.1
  +++ XmlRpcHttpTransport.java	13 May 2005 21:06:37 -0000	1.1.2.2
  @@ -89,9 +89,14 @@
   		}
   	}
   
  +	protected void setContentType(XmlRpcHttpClientConfig pConfig, Object pConnection) throws XmlRpcClientException {
  +		setRequestHeader(pConnection, "Content-Type", "text/html");
  +	}
  +
   	protected void initConnection(XmlRpcStreamRequestConfig pConfig, Object pConnection) throws XmlRpcClientException {
   		super.initConnection(pConfig, pConnection);
   		XmlRpcHttpClientConfig config = (XmlRpcHttpClientConfig) pConfig;
  +		setContentType(config, pConnection);
   		setCredentials(config, pConnection);
   		setCompressionHeaders(config, pConnection);
   	}
  
  
  
  No                   revision
  No                   revision
  1.1.2.3   +1 -1      ws-xmlrpc/src/java/org/apache/xmlrpc/serializer/Attic/XmlRpcWriter.java
  
  Index: XmlRpcWriter.java
  ===================================================================
  RCS file: /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/serializer/Attic/XmlRpcWriter.java,v
  retrieving revision 1.1.2.2
  retrieving revision 1.1.2.3
  diff -u -r1.1.2.2 -r1.1.2.3
  --- XmlRpcWriter.java	13 May 2005 00:18:21 -0000	1.1.2.2
  +++ XmlRpcWriter.java	13 May 2005 21:06:37 -0000	1.1.2.3
  @@ -122,7 +122,7 @@
   		handler.startElement("", "fault", "fault", ZERO_ATTRIBUTES);
   		Map map = new HashMap();
           map.put("faultCode", new Integer(pCode));
  -        map.put("faultString", pMessage);
  +        map.put("faultString", pMessage == null ? "" : pMessage);
   		writeValue(map);
   		handler.endElement("", "fault", "fault");
   		handler.endElement("", "methodResponse", "methodResponse");
  
  
  
  1.1.2.2   +5 -1      ws-xmlrpc/src/java/org/apache/xmlrpc/serializer/Attic/I4Serializer.java
  
  Index: I4Serializer.java
  ===================================================================
  RCS file: /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/serializer/Attic/I4Serializer.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- I4Serializer.java	12 May 2005 01:58:52 -0000	1.1.2.1
  +++ I4Serializer.java	13 May 2005 21:06:37 -0000	1.1.2.2
  @@ -21,9 +21,13 @@
   /** A {@link TypeSerializer} for integers.
    */
   public class I4Serializer extends TypeSerializerImpl {
  +	/** Tag name of an int value.
  +	 */
  +	public static final String INT_TAG = "int";
  +
   	/** Tag name of an i4 value.
   	 */
  -	public static final String I4_TAG = "int";
  +	public static final String I4_TAG = "i4";
   
   	public void write(ContentHandler pHandler, Object pObject) throws SAXException {
   		write(pHandler, I4_TAG, pObject.toString());
  
  
  
  1.1.2.2   +2 -2      ws-xmlrpc/src/java/org/apache/xmlrpc/serializer/Attic/I2Serializer.java
  
  Index: I2Serializer.java
  ===================================================================
  RCS file: /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/serializer/Attic/I2Serializer.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- I2Serializer.java	12 May 2005 01:58:52 -0000	1.1.2.1
  +++ I2Serializer.java	13 May 2005 21:06:37 -0000	1.1.2.2
  @@ -23,11 +23,11 @@
   public class I2Serializer extends TypeSerializerImpl {
   	/** Tag name of an i2 value.
   	 */
  -	public static final String I2_TAG = "short";
  +	public static final String I2_TAG = "i2";
   
   	/** Fully qualified name of an i2 value.
   	 */
  -	public static final String EX_I2_TAG = "ex:short";
  +	public static final String EX_I2_TAG = "ex:i2";
   
   	public void write(ContentHandler pHandler, Object pObject) throws SAXException {
   		write(pHandler, I2_TAG, EX_I2_TAG, pObject.toString());
  
  
  
  1.1.2.2   +2 -2      ws-xmlrpc/src/java/org/apache/xmlrpc/serializer/Attic/I1Serializer.java
  
  Index: I1Serializer.java
  ===================================================================
  RCS file: /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/serializer/Attic/I1Serializer.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- I1Serializer.java	12 May 2005 01:58:52 -0000	1.1.2.1
  +++ I1Serializer.java	13 May 2005 21:06:37 -0000	1.1.2.2
  @@ -23,11 +23,11 @@
   public class I1Serializer extends TypeSerializerImpl {
   	/** Tag name of an i1 value.
   	 */
  -	public static final String I1_TAG = "byte";
  +	public static final String I1_TAG = "i1";
   
   	/** Fully qualified name of an i1 value.
   	 */
  -	public static final String EX_I1_TAG = "ex:byte";
  +	public static final String EX_I1_TAG = "ex:i1";
   
   	public void write(ContentHandler pHandler, Object pObject) throws SAXException {
   		write(pHandler, I1_TAG, EX_I1_TAG, pObject.toString());
  
  
  
  1.1.2.2   +2 -2      ws-xmlrpc/src/java/org/apache/xmlrpc/serializer/Attic/I8Serializer.java
  
  Index: I8Serializer.java
  ===================================================================
  RCS file: /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/serializer/Attic/I8Serializer.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- I8Serializer.java	12 May 2005 01:58:52 -0000	1.1.2.1
  +++ I8Serializer.java	13 May 2005 21:06:37 -0000	1.1.2.2
  @@ -23,11 +23,11 @@
   public class I8Serializer extends TypeSerializerImpl {
   	/** Tag name of an i8 value.
   	 */
  -	public static final String I8_TAG = "long";
  +	public static final String I8_TAG = "i8";
   
   	/** Fully qualified name of an i8 value.
   	 */
  -	public static final String EX_I8_TAG = "ex:long";
  +	public static final String EX_I8_TAG = "ex:i8";
   
   	public void write(ContentHandler pHandler, Object pObject) throws SAXException {
   		write(pHandler, I8_TAG, EX_I8_TAG, pObject.toString());
  
  
  
  No                   revision
  No                   revision
  1.1.2.2   +1 -1      ws-xmlrpc/src/test/org/apache/xmlrpc/test/Attic/SerializerTest.java
  
  Index: SerializerTest.java
  ===================================================================
  RCS file: /home/cvs/ws-xmlrpc/src/test/org/apache/xmlrpc/test/Attic/SerializerTest.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- SerializerTest.java	13 May 2005 00:18:21 -0000	1.1.2.1
  +++ SerializerTest.java	13 May 2005 21:06:37 -0000	1.1.2.2
  @@ -100,7 +100,7 @@
   		String expect =
   			"<?xml version=\"1.0\" encoding=\"US-ASCII\"?>"
   			+ "<methodCall xmlns:ex=\"http://ws.apache.org/xmlrpc/namespaces/extensions\">"
  -			+ "<methodName>byteParam</methodName><params><param><value><ex:byte>3</ex:byte></value></param></params></methodCall>";
  +			+ "<methodName>byteParam</methodName><params><param><value><ex:i1>3</ex:i1></value></param></params></methodCall>";
   		assertEquals(expect, got);
   	}
   
  
  
  
  1.1.2.2   +7 -1      ws-xmlrpc/src/test/org/apache/xmlrpc/test/Attic/HttpTransportTest.java
  
  Index: HttpTransportTest.java
  ===================================================================
  RCS file: /home/cvs/ws-xmlrpc/src/test/org/apache/xmlrpc/test/Attic/HttpTransportTest.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- HttpTransportTest.java	12 May 2005 01:58:52 -0000	1.1.2.1
  +++ HttpTransportTest.java	13 May 2005 21:06:37 -0000	1.1.2.2
  @@ -21,6 +21,8 @@
   import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
   import org.apache.xmlrpc.client.XmlRpcHttpTransportFactory;
   import org.apache.xmlrpc.client.XmlRpcTransportFactory;
  +import org.apache.xmlrpc.server.XmlRpcServer;
  +import org.apache.xmlrpc.server.XmlRpcServerConfigImpl;
   import org.apache.xmlrpc.webserver.WebServer;
   
   
  @@ -28,11 +30,15 @@
    * {@link org.apache.xmlrpc.client.XmlRpcHttpTransport}.
    */
   public class HttpTransportTest extends BaseTestCase {
  -	private WebServer webServer = new WebServer(0);
  +	private final WebServer webServer = new WebServer(0);
   	private boolean isActive;
   
   	public void setUp() throws Exception {
   		if (!isActive) {
  +			XmlRpcServer server = webServer.getXmlRpcServer();
  +			server.setHandlerMapping(getHandlerMapping());
  +			XmlRpcServerConfigImpl serverConfig = (XmlRpcServerConfigImpl) server.getConfig();
  +			serverConfig.setEnabledForExtensions(true);
   			webServer.start();
   			isActive = true;
   		}
  
  
  
  No                   revision
  No                   revision
  1.1.2.3   +7 -2      ws-xmlrpc/src/java/org/apache/xmlrpc/server/Attic/XmlRpcStreamServer.java
  
  Index: XmlRpcStreamServer.java
  ===================================================================
  RCS file: /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/server/Attic/XmlRpcStreamServer.java,v
  retrieving revision 1.1.2.2
  retrieving revision 1.1.2.3
  diff -u -r1.1.2.2 -r1.1.2.3
  --- XmlRpcStreamServer.java	13 May 2005 00:18:22 -0000	1.1.2.2
  +++ XmlRpcStreamServer.java	13 May 2005 21:06:37 -0000	1.1.2.3
  @@ -65,6 +65,10 @@
   		try {
   			xr.parse(new InputSource(pStream));
   		} catch (SAXException e) {
  +			Exception ex = e.getException();
  +			if (ex != null  &&  ex instanceof XmlRpcException) {
  +				throw (XmlRpcException) ex;
  +			}
   			throw new XmlRpcException("Failed to parse XML-RPC request: " + e.getMessage(), e);
   		} catch (IOException e) {
   			throw new XmlRpcException("Failed to read XML-RPC request: " + e.getMessage(), e);
  @@ -107,6 +111,7 @@
   		}
   		message = pError.getMessage();
   		try {
  +			pError.printStackTrace();
   			getXmlRpcWriter(pConfig, pStream).write(pConfig, code, message);
   		} catch (SAXException e) {
   			throw new XmlRpcException("Failed to write XML-RPC response: " + e.getMessage(), e);
  @@ -152,11 +157,11 @@
   						Object pConnection)
   			throws IOException, XmlRpcException {
   		try {
  -			InputStream istream = getInputStream(pConfig, pConnection);
  -			XmlRpcRequest request = getRequest(pConfig, istream);
   			Object result;
   			Throwable error;
   			try {
  +				InputStream istream = getInputStream(pConfig, pConnection);
  +				XmlRpcRequest request = getRequest(pConfig, istream);
   				result = execute(request);
   				error = null;
   			} catch (Throwable t) {
  
  
  
  No                   revision
  No                   revision
  1.1.2.2   +8 -6      ws-xmlrpc/src/java/org/apache/xmlrpc/webserver/Attic/WebServer.java
  
  Index: WebServer.java
  ===================================================================
  RCS file: /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/webserver/Attic/WebServer.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- WebServer.java	12 May 2005 01:58:53 -0000	1.1.2.1
  +++ WebServer.java	13 May 2005 21:06:37 -0000	1.1.2.2
  @@ -276,12 +276,7 @@
   					try {
   						if (allowConnection(socket)) {
   							final Connection con = new Connection(this, server, socket);
  -							ThreadPool.Task task = new ThreadPool.Task(){
  -								public void run() throws Throwable {
  -									server.execute(con.getRequestConfig(), con);
  -								}
  -							};
  -							if (pool.startTask(task)) {
  +							if (pool.startTask(con)) {
   								socket = null;
   							} else {
   								log("Maximum load of " + pool.getMaxThreads()
  @@ -360,4 +355,11 @@
   	public synchronized void log(String pMessage) {
   		System.err.println(df.format(new Date()) + ", " + Thread.currentThread().getName() + ": " + pMessage);
   	}
  +
  +	/** Returns the {@link org.apache.xmlrpc.server.XmlRpcServer}.
  +	 * @return The server object.
  +	 */
  +	public XmlRpcStreamServer getXmlRpcServer() {
  +		return server;
  +	}
   }
  
  
  
  No                   revision
  No                   revision
  1.1.2.3   +1 -1      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.2
  retrieving revision 1.1.2.3
  diff -u -r1.1.2.2 -r1.1.2.3
  --- TypeFactoryImpl.java	13 May 2005 00:18:22 -0000	1.1.2.2
  +++ TypeFactoryImpl.java	13 May 2005 21:06:37 -0000	1.1.2.3
  @@ -155,7 +155,7 @@
   				return new FloatParser();
   			}
   		} else if ("".equals(pURI)) {
  -			if (I4Serializer.I4_TAG.equals(pLocalName)) {
  +			if (I4Serializer.INT_TAG.equals(pLocalName)  ||  I4Serializer.I4_TAG.equals(pLocalName)) {
   				return new I4Parser();
   			} else if (BooleanSerializer.BOOLEAN_TAG.equals(pLocalName)) {
   				return new BooleanParser();
  
  
  
  No                   revision
  No                   revision
  1.1.2.3   +48 -20    ws-xmlrpc/src/java/org/apache/xmlrpc/parser/Attic/XmlRpcResponseParser.java
  
  Index: XmlRpcResponseParser.java
  ===================================================================
  RCS file: /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/parser/Attic/XmlRpcResponseParser.java,v
  retrieving revision 1.1.2.2
  retrieving revision 1.1.2.3
  diff -u -r1.1.2.2 -r1.1.2.3
  --- XmlRpcResponseParser.java	13 May 2005 00:18:21 -0000	1.1.2.2
  +++ XmlRpcResponseParser.java	13 May 2005 21:06:37 -0000	1.1.2.3
  @@ -52,12 +52,12 @@
   			super.setResult(pResult);
   		} else {
   			Map map = (Map) pResult;
  -			String faultCode = (String) map.get("faultCode");
  +			Integer faultCode = (Integer) map.get("faultCode");
   			if (faultCode == null) {
   				throw new SAXParseException("Missing faultCode", getDocumentLocator());
   			}
   			try {
  -				errorCode = Integer.parseInt(faultCode);
  +				errorCode = faultCode.intValue();
   			} catch (NumberFormatException e) {
   				throw new SAXParseException("Invalid faultCode: " + faultCode,
   											getDocumentLocator());
  @@ -93,19 +93,33 @@
   				}
   				break;
   			case 2:
  -				if (!"".equals(pURI)  ||  !"param".equals(pLocalName)) {
  -					throw new SAXParseException("Expected param element, got "
  -							+ new QName(pURI, pLocalName),
  -							getDocumentLocator());
  +				if (isSuccess) {
  +					if (!"".equals(pURI)  ||  !"param".equals(pLocalName)) {
  +						throw new SAXParseException("Expected param element, got "
  +													+ new QName(pURI, pLocalName),
  +													getDocumentLocator());
  +					}
  +				} else {
  +					if ("".equals(pURI)  &&  "value".equals(pLocalName)) {
  +						startValueTag();
  +					} else {
  +						throw new SAXParseException("Expected value element, got "
  +													+ new QName(pURI, pLocalName),
  +													getDocumentLocator());
  +					}
   				}
   				break;
   			case 3:
  -				if ("".equals(pURI)  &&  "value".equals(pLocalName)) {
  -					startValueTag();
  +				if (isSuccess) {
  +					if ("".equals(pURI)  &&  "value".equals(pLocalName)) {
  +						startValueTag();
  +					} else {
  +						throw new SAXParseException("Expected value element, got "
  +								+ new QName(pURI, pLocalName),
  +								getDocumentLocator());
  +					}
   				} else {
  -					throw new SAXParseException("Expected value element, got "
  -							+ new QName(pURI, pLocalName),
  -							getDocumentLocator());
  +					super.startElement(pURI, pLocalName, pQName, pAttrs);
   				}
   				break;
   			default:
  @@ -139,19 +153,33 @@
   					break;
   				}
   			case 2:
  -				if (!"".equals(pURI)  ||  !"param".equals(pLocalName)) {
  -					throw new SAXParseException("Expected /param, got "
  -												+ new QName(pURI, pLocalName),
  -												getDocumentLocator());
  +				if (isSuccess) {
  +					if (!"".equals(pURI)  ||  !"param".equals(pLocalName)) {
  +						throw new SAXParseException("Expected /param, got "
  +													+ new QName(pURI, pLocalName),
  +													getDocumentLocator());
  +					}
  +				} else {
  +					if ("".equals(pURI)  &&  "value".equals(pLocalName)) {
  +						endValueTag();
  +					} else {
  +						throw new SAXParseException("Expected /value, got "
  +								+ new QName(pURI, pLocalName),
  +								getDocumentLocator());
  +					}
   				}
   				break;
   			case 3:
  -				if ("".equals(pURI)  &&  "value".equals(pLocalName)) {
  -					endValueTag();
  +				if (isSuccess) {
  +					if ("".equals(pURI)  &&  "value".equals(pLocalName)) {
  +						endValueTag();
  +					} else {
  +						throw new SAXParseException("Expected /value, got "
  +								+ new QName(pURI, pLocalName),
  +								getDocumentLocator());
  +					}
   				} else {
  -					throw new SAXParseException("Expected /value, got "
  -							+ new QName(pURI, pLocalName),
  -							getDocumentLocator());
  +					super.endElement(pURI, pLocalName, pQName);
   				}
   				break;
   			default: