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;
>    }
> 
>

Reply via email to