What about adding my fixes to support gzip compression ?
On 30 Mar 2005 11:19:18 -0000, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> aevers 2005/03/30 03:19:18
>
> Modified: src/java/org/apache/xmlrpc CommonsXmlRpcTransport.java
> DefaultXmlRpcTransport.java
> LiteXmlRpcTransport.java XmlRpc.java
> XmlRpcClientWorker.java XmlRpcTransport.java
> Log:
> Bug 20339: LiteXmlRpcTransport throws IOExcpetion 'socket closed'
>
> Fix general resource leaks regarding connections in client side
> transpot code. There is now an endClientRequest() in the
> XmlRpcTransport interface. Appropriate implementations have been
> filled in for all shipped transports.
>
> Passes all tests except Base64 (was already broken). Note, for
> tests to pass you must have commons-logging installed as
> it is used by commons-httpclient.
>
> PR: 20339
>
> Revision Changes Path
> 1.3 +28 -10
> ws-xmlrpc/src/java/org/apache/xmlrpc/CommonsXmlRpcTransport.java
>
> Index: CommonsXmlRpcTransport.java
> ===================================================================
> RCS file:
> /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/CommonsXmlRpcTransport.java,v
> retrieving revision 1.2
> retrieving revision 1.3
> diff -u -r1.2 -r1.3
> --- CommonsXmlRpcTransport.java 26 Dec 2003 16:57:51 -0000 1.2
> +++ CommonsXmlRpcTransport.java 30 Mar 2005 11:19:18 -0000 1.3
> @@ -76,20 +76,28 @@
> * @version $Id$
> * @since 1.2
> */
> -public class CommonsXmlRpcTransport implements XmlRpcTransport {
> +public class CommonsXmlRpcTransport implements XmlRpcTransport
> +{
>
> + protected PostMethod method;
> +
> /** Creates a new instance of CommonsXmlRpcTransport */
> - public CommonsXmlRpcTransport(URL url, HttpClient client) {
> + public CommonsXmlRpcTransport(URL url, HttpClient client)
> + {
> this.url = url;
> - if (client == null) {
> + if (client == null)
> + {
> HttpClient newClient = new HttpClient();
> this.client = newClient;
> - } else {
> + }
> + else
> + {
> this.client = client;
> }
> }
>
> - public CommonsXmlRpcTransport(URL url) {
> + public CommonsXmlRpcTransport(URL url)
> + {
> this(url, null);
> }
>
> @@ -98,8 +106,9 @@
> private final Header userAgentHeader = new Header("User-Agent",
> XmlRpc.version);
> private boolean http11 = false; // defaults to HTTP 1.0
>
> - public InputStream sendXmlRpc(byte[] request) throws IOException,
> XmlRpcClientException {
> - PostMethod method = new PostMethod(url.toString());
> + public InputStream sendXmlRpc(byte[] request) throws IOException,
> XmlRpcClientException
> + {
> + method = new PostMethod(url.toString());
> method.setHttp11(http11);
> method.setRequestHeader(new Header("Content-Type", "text/xml"));
> method.setRequestHeader(userAgentHeader);
> @@ -112,11 +121,20 @@
> return method.getResponseBodyAsStream();
> }
>
> - public void setHttp11(boolean http11) {
> + public void setHttp11(boolean http11)
> + {
> this.http11 = http11;
> }
>
> - public void setUserAgent(String userAgent) {
> + public void setUserAgent(String userAgent)
> + {
> userAgentHeader.setValue(userAgent);
> }
> +
> + public void endClientRequest()
> + throws XmlRpcClientException
> + {
> + // Rlease connection resources
> + method.releaseConnection();
> + }
> }
>
> 1.3 +16 -2
> ws-xmlrpc/src/java/org/apache/xmlrpc/DefaultXmlRpcTransport.java
>
> Index: DefaultXmlRpcTransport.java
> ===================================================================
> RCS file:
> /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/DefaultXmlRpcTransport.java,v
> retrieving revision 1.2
> retrieving revision 1.3
> diff -u -r1.2 -r1.3
> --- DefaultXmlRpcTransport.java 29 Jan 2003 00:46:37 -0000 1.2
> +++ DefaultXmlRpcTransport.java 30 Mar 2005 11:19:18 -0000 1.3
> @@ -75,6 +75,7 @@
> {
> protected URL url;
> protected String auth;
> + protected URLConnection con;
>
> /**
> * Create a new DefaultXmlRpcTransport with the specified URL and basic
> @@ -104,7 +105,7 @@
> public InputStream sendXmlRpc(byte [] request)
> throws IOException
> {
> - URLConnection con = url.openConnection();
> + con = url.openConnection();
> con.setDoInput(true);
> con.setDoOutput(true);
> con.setUseCaches(false);
> @@ -133,4 +134,17 @@
> {
> auth = HttpUtil.encodeBasicAuthentication(user, password);
> }
> +
> + public void endClientRequest()
> + throws XmlRpcClientException
> + {
> + try
> + {
> + con.getInputStream().close();
> + }
> + catch (Exception e)
> + {
> + throw new XmlRpcClientException("Exception closing
> URLConnection", e);
> + }
> + }
> }
>
> 1.4 +10 -7
> ws-xmlrpc/src/java/org/apache/xmlrpc/LiteXmlRpcTransport.java
>
> Index: LiteXmlRpcTransport.java
> ===================================================================
> RCS file:
> /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/LiteXmlRpcTransport.java,v
> retrieving revision 1.3
> retrieving revision 1.4
> diff -u -r1.3 -r1.4
> --- LiteXmlRpcTransport.java 1 May 2003 16:53:15 -0000 1.3
> +++ LiteXmlRpcTransport.java 30 Mar 2005 11:19:18 -0000 1.4
> @@ -147,12 +147,6 @@
> }
> }
>
> - // eepalive is always false if XmlRpc.keepalive is false
> - if (!keepalive)
> - {
> - closeConnection ();
> - }
> -
> return in;
> }
> catch (IOException iox)
> @@ -326,6 +320,15 @@
> auth = HttpUtil.encodeBasicAuthentication(user, password);
> }
>
> + public void endClientRequest()
> + {
> + // eepalive is always false if XmlRpc.keepalive is false
> + if (!keepalive)
> + {
> + closeConnection ();
> + }
> + }
> +
> /**
> *
> * @return
>
> 1.38 +41 -2 ws-xmlrpc/src/java/org/apache/xmlrpc/XmlRpc.java
>
> Index: XmlRpc.java
> ===================================================================
> RCS file: /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/XmlRpc.java,v
> retrieving revision 1.37
> retrieving revision 1.38
> diff -u -r1.37 -r1.38
> --- XmlRpc.java 30 Jun 2004 06:11:55 -0000 1.37
> +++ XmlRpc.java 30 Mar 2005 11:19:18 -0000 1.38
> @@ -56,6 +56,7 @@
> */
>
> import java.io.InputStream;
> +import java.io.InputStreamReader;
> import java.util.Hashtable;
> import java.util.Stack;
> import java.util.Vector;
> @@ -188,6 +189,15 @@
> */
> static String encoding = XmlWriter.ISO8859_1;
>
> + /**
> + * Java's name for the input encoding we're using. Defaults to
> + * <code>null</code>, signifying the platform default. This may
> + * need to be overridden on platforms where the default encoding
> + * is not compatible with ASCII (eg. EBCDIC) but the network is
> + * still ASCII-like.
> + */
> + static String inputEncoding = null;
> +
> private TypeFactory typeFactory;
>
> /**
> @@ -342,6 +352,28 @@
> }
>
> /**
> + * Set the input encoding of the XML.
> + * This is used only if set.
> + *
> + * @param enc The Java name of the encoding.
> + */
> + public static void setInputEncoding(String enc)
> + {
> + inputEncoding = enc;
> + }
> +
> + /**
> + * Return the input encoding. This may be null. This is always a
> + * Java encoding name, it is not transformed.
> + *
> + * @return the Java encoding name to use, if set, otherwise null.
> + */
> + public static String getInputEncoding ()
> + {
> + return inputEncoding;
> + }
> +
> + /**
> * Gets the maximum number of threads used at any given moment.
> */
> public static int getMaxThreads()
> @@ -440,7 +472,14 @@
> }
> try
> {
> - parser.parse(new InputSource (is));
> + if(inputEncoding == null)
> + {
> + parser.parse(new InputSource (is));
> + }
> + else
> + {
> + parser.parse( new InputSource( new InputStreamReader(is,
> inputEncoding)));
> + }
> }
> finally
> {
>
> 1.2 +8 -0
> ws-xmlrpc/src/java/org/apache/xmlrpc/XmlRpcClientWorker.java
>
> Index: XmlRpcClientWorker.java
> ===================================================================
> RCS file:
> /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/XmlRpcClientWorker.java,v
> retrieving revision 1.1
> retrieving revision 1.2
> diff -u -r1.1 -r1.2
> --- XmlRpcClientWorker.java 5 Dec 2002 08:49:24 -0000 1.1
> +++ XmlRpcClientWorker.java 30 Mar 2005 11:19:18 -0000 1.2
> @@ -136,6 +136,14 @@
> System.out.println("Spent " + (System.currentTimeMillis()
> - now)
> + " millis in
> request/process/response");
> }
> + try
> + {
> + transport.endClientRequest();
> + }
> + catch (RuntimeException re)
> + {
> + throw new XmlRpcClientException("Transport exception in
> endClientRequest()", re);
> + }
> }
> }
>
> 1.2 +19 -1
> ws-xmlrpc/src/java/org/apache/xmlrpc/XmlRpcTransport.java
>
> Index: XmlRpcTransport.java
> ===================================================================
> RCS file:
> /home/cvs/ws-xmlrpc/src/java/org/apache/xmlrpc/XmlRpcTransport.java,v
> retrieving revision 1.1
> retrieving revision 1.2
> diff -u -r1.1 -r1.2
> --- XmlRpcTransport.java 5 Dec 2002 08:49:24 -0000 1.1
> +++ XmlRpcTransport.java 30 Mar 2005 11:19:18 -0000 1.2
> @@ -68,6 +68,24 @@
> */
> public interface XmlRpcTransport
> {
> + /**
> + * Send an XML-RPC message. This method is called to send a message to
> the
> + * other party.
> + *
> + * @param request the request in network encoding.
> + *
> + * @throws IOException if an IOException occurs in the IO level of the
> transport.
> + * @throws XmlRpcClientException if an exception occurs in the transport.
> + */
> public InputStream sendXmlRpc(byte [] request)
> throws IOException, XmlRpcClientException;
> +
> + /**
> + * End an XML-RPC request. This method is called by the XmlRpcClient
> when then
> + * request has been sent and the response (or an exception) recieved.
> + *
> + * @throws XmlRpcClientException if an exception occurs in the transport.
> + */
> + public void endClientRequest()
> + throws XmlRpcClientException;
> }
>
>