Here is a patch to support GZIP in CommonsXmlRpcTransport.java :
Anyone to revue and commit to HEAD ?
Regards
---
--- 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);
}
}
+