From d01460d9408a6a8f7267d54172e5e276bbaf1924 Mon Sep 17 00:00:00 2001 From: Luc Boudreau Date: Mon, 10 Feb 2014 11:04:44 -0500 Subject: [PATCH] Fix for feature request #23. Adds support for GZIP compression in the HTTP proxy. --- .../driver/xmla/proxy/XmlaOlap4jHttpProxy.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/org/olap4j/driver/xmla/proxy/XmlaOlap4jHttpProxy.java b/src/org/olap4j/driver/xmla/proxy/XmlaOlap4jHttpProxy.java index 27c36db..3af3f0e 100644 --- a/src/org/olap4j/driver/xmla/proxy/XmlaOlap4jHttpProxy.java +++ b/src/org/olap4j/driver/xmla/proxy/XmlaOlap4jHttpProxy.java @@ -24,6 +24,7 @@ import java.io.*; import java.net.*; import java.util.concurrent.Future; +import java.util.zip.GZIPInputStream; /** * Extends the AbstractCachedProxy and serves as @@ -87,6 +88,11 @@ public byte[] getResponse(XmlaOlap4jServerInfos serverInfos, String request) getEncodingCharsetName() .concat(";q=1")); + // Tell the server that we support gzip encoding + urlConnection.setRequestProperty( + "Accept-Encoding", + "gzip"); + // Some servers expect a SOAPAction header. // TODO There is bound to be a better way to do this. if (request.contains(DISCOVER)) { @@ -128,6 +134,14 @@ public byte[] getResponse(XmlaOlap4jServerInfos serverInfos, String request) // Get the response, again assuming default encoding. InputStream is = urlConnection.getInputStream(); + + // Detect that the server used gzip encoding + String contentEncoding = + urlConnection.getHeaderField("Content-Encoding"); + if("gzip".equals(contentEncoding)) { + is = new GZIPInputStream(is); + } + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buf = new byte[1024]; int count;