You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fm...@apache.org on 2014/03/26 17:12:54 UTC

svn commit: r1581903 - /chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/Response.java

Author: fmui
Date: Wed Mar 26 16:12:54 2014
New Revision: 1581903

URL: http://svn.apache.org/r1581903
Log:
CMIS-771: first step to handle gzip on Android

Modified:
    chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/Response.java

Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/Response.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/Response.java?rev=1581903&r1=1581902&r2=1581903&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/Response.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/http/Response.java Wed Mar 26 16:12:54 2014
@@ -39,6 +39,8 @@ import org.apache.chemistry.opencmis.com
  * HTTP Response.
  */
 public class Response {
+    private static final int MAX_ERROR_LENGTH = 128 * 1024;
+
     private final int responseCode;
     private final String responseMessage;
     private final Map<String, List<String>> headers;
@@ -54,6 +56,7 @@ public class Response {
         this.responseMessage = responseMessage;
         this.stream = responseStream;
         this.hasResponseStream = (stream != null);
+        boolean isGZIP = (responseStream instanceof GZIPInputStream);
 
         this.headers = new HashMap<String, List<String>>();
         if (headers != null) {
@@ -84,12 +87,13 @@ public class Response {
                 if (contentTypeLower.startsWith("text/") || contentTypeLower.endsWith("+xml")
                         || contentTypeLower.startsWith("application/xml")
                         || contentTypeLower.startsWith("application/json")) {
+                    errorStream = new BufferedInputStream(errorStream, 64 * 1024);
                     StringBuilder sb = new StringBuilder();
 
                     try {
                         String encoding = getContentEncoding();
                         if (encoding != null) {
-                            if (encoding.toLowerCase().trim().equals("gzip")) {
+                            if (encoding.toLowerCase().trim().equals("gzip") && !isGZIP) {
                                 errorStream = new GZIPInputStream(errorStream, 4096);
                             } else if (encoding.toLowerCase().trim().equals("deflate")) {
                                 errorStream = new InflaterInputStream(errorStream, new Inflater(true), 4096);
@@ -101,6 +105,9 @@ public class Response {
                         int b;
                         while ((b = reader.read(buffer)) > -1) {
                             sb.append(buffer, 0, b);
+                            if (sb.length() >= MAX_ERROR_LENGTH) {
+                                break;
+                            }
                         }
                         reader.close();
 
@@ -119,8 +126,9 @@ public class Response {
         }
 
         // get the stream length
+        length = null;
         String lengthStr = getHeader("Content-Length");
-        if (lengthStr != null) {
+        if (lengthStr != null && !isGZIP) {
             try {
                 length = new BigInteger(lengthStr);
             } catch (NumberFormatException e) {
@@ -147,7 +155,7 @@ public class Response {
             if (hasResponseStream) {
                 String encoding = getContentEncoding();
                 if (encoding != null) {
-                    if (encoding.toLowerCase().trim().equals("gzip")) {
+                    if (encoding.toLowerCase().trim().equals("gzip") && !isGZIP) {
                         // if the stream is gzip encoded, decode it
                         length = null;
                         try {
@@ -165,8 +173,7 @@ public class Response {
                 }
 
                 String transferEncoding = getContentTransferEncoding();
-                if ((stream != null) && (transferEncoding != null)
-                        && (transferEncoding.toLowerCase().trim().equals("base64"))) {
+                if (transferEncoding != null && transferEncoding.toLowerCase().trim().equals("base64")) {
                     // if the stream is base64 encoded, decode it
                     length = null;
                     stream = new Base64.InputStream(stream);