Here is a patch to support gzip compression with CommonsXmlRpcTransport :

--- CommonsXmlRpcTransport.java.orig    2005-03-04 15:32:24.000000000 +0100
+++ CommonsXmlRpcTransport.java 2005-03-04 15:33:50.000000000 +0100
@@ -59,6 +59,8 @@
 import java.io.InputStream;
 import java.io.IOException;
 import java.net.URL;
+import java.util.zip.GZIPInputStream;
+
 import org.apache.commons.httpclient.Header;
 import org.apache.commons.httpclient.HostConfiguration;
 import org.apache.commons.httpclient.HttpClient;
@@ -97,11 +99,16 @@
     private HttpClient client;
     private final Header userAgentHeader = new Header("User-Agent",
XmlRpc.version);
     private boolean http11 = false; // defaults to HTTP 1.0
+    private boolean gzip = false;

     public InputStream sendXmlRpc(byte[] request) throws IOException,
XmlRpcClientException {
         PostMethod method = new PostMethod(url.toString());
         method.setHttp11(http11);
         method.setRequestHeader(new Header("Content-Type", "text/xml"));
+
+        if (gzip)
+               method.setRequestHeader(new Header("Accept-Encoding", "gzip"));
+
         method.setRequestHeader(userAgentHeader);
         // TODO: authentication not implemented yet
         method.setRequestBody(new ByteArrayInputStream(request));
@@ -109,14 +116,32 @@
         HostConfiguration hostConfig = new HostConfiguration();
         hostConfig.setHost(hostURI);
         client.executeMethod(hostConfig, method);
-        return method.getResponseBodyAsStream();
+
+        boolean lgzipo = false;
+
+        Header lHeader = method.getResponseHeader( "Content-Encoding" );
+        if ( lHeader != null ) {
+            String lValue = lHeader.getValue();
+            if ( lValue != null )
+                       lgzipo = (lValue.indexOf( "gzip" ) >= 0);
+        }
+
+        if (lgzipo)
+               return( new GZIPInputStream(
method.getResponseBodyAsStream() ) );
+        else
+               return method.getResponseBodyAsStream();
     }

     public void setHttp11(boolean http11) {
         this.http11 = http11;
     }

+    public void setGzip(boolean gzip) {
+        this.gzip = gzip;
+    }
+
     public void setUserAgent(String userAgent) {
         userAgentHeader.setValue(userAgent);
     }
 }
+

Any chance to see it commited in HEAD ?

Regards

Reply via email to