CAMEL-5806: HTTP components with producers should allow GET with data (a bit 
unusual but its allowed).


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/1ba5aa2f
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/1ba5aa2f
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/1ba5aa2f

Branch: refs/heads/master
Commit: 1ba5aa2f4b9c646d9b96fb1db43d6a5396e25e48
Parents: 4a29eb4
Author: Claus Ibsen <davscl...@apache.org>
Authored: Mon Feb 16 13:22:25 2015 +0100
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Mon Feb 16 13:24:17 2015 +0100

----------------------------------------------------------------------
 .../apache/camel/component/http/DefaultHttpBinding.java | 12 +++++++++++-
 .../org/apache/camel/component/http/HttpConverter.java  | 10 +++++++---
 .../org/apache/camel/component/http/HttpMessage.java    |  8 +++++++-
 .../camel/component/http4/DefaultHttpBinding.java       | 12 +++++++++++-
 .../org/apache/camel/component/http4/HttpConverter.java | 12 ++++++++----
 .../org/apache/camel/component/http4/HttpMessage.java   |  8 ++++++++
 .../camel/component/jetty/HttpStreamCacheFileTest.java  |  1 +
 7 files changed, 53 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/1ba5aa2f/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java
----------------------------------------------------------------------
diff --git 
a/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java
 
b/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java
index b4c54fb..651c2ac 100644
--- 
a/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java
+++ 
b/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java
@@ -438,13 +438,23 @@ public class DefaultHttpBinding implements HttpBinding {
         // lets assume the body is a reader
         HttpServletRequest request = httpMessage.getRequest();
         // there is only a body if we have a content length, or its -1 to 
indicate unknown length
-        if (request.getContentLength() == 0) {
+        int len = request.getContentLength();
+        LOG.trace("HttpServletRequest content-length: {}", len);
+        if (len == 0) {
             return null;
         }
         if (isUseReaderForPayload()) {
             // use reader to read the response body
             return request.getReader();
         } else {
+            // if we do not know if there is any data at all, then make sure 
to check the stream first
+            if (len < 0) {
+                InputStream is = request.getInputStream();
+                if (is.available() == 0) {
+                    // no data so return null
+                    return null;
+                }
+            }
             // reade the response body from servlet request
             return HttpHelper.readResponseBodyFromServletRequest(request, 
httpMessage.getExchange());
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/1ba5aa2f/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConverter.java
----------------------------------------------------------------------
diff --git 
a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConverter.java
 
b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConverter.java
index 40ac6eb..2b7138d 100644
--- 
a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConverter.java
+++ 
b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConverter.java
@@ -19,7 +19,6 @@ package org.apache.camel.component.http;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
-
 import javax.servlet.ServletInputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -85,11 +84,16 @@ public final class HttpConverter {
         if (request == null) {
             return null;
         }
+        InputStream is = request.getInputStream();
+        if (is != null && is.available() <= 0) {
+            // there is no data, so we cannot uncompress etc.
+            return is;
+        }
         if (exchange == null || 
!exchange.getProperty(Exchange.SKIP_GZIP_ENCODING, Boolean.FALSE, 
Boolean.class)) {
             String contentEncoding = 
request.getHeader(Exchange.CONTENT_ENCODING);
-            return GZIPHelper.uncompressGzip(contentEncoding, 
request.getInputStream());
+            return GZIPHelper.uncompressGzip(contentEncoding, is);
         } else {
-            return request.getInputStream();
+            return is;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/1ba5aa2f/components/camel-http/src/main/java/org/apache/camel/component/http/HttpMessage.java
----------------------------------------------------------------------
diff --git 
a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpMessage.java
 
b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpMessage.java
index 8218f2d..f8e8cfd 100644
--- 
a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpMessage.java
+++ 
b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpMessage.java
@@ -17,13 +17,13 @@
 package org.apache.camel.component.http;
 
 import java.io.IOException;
-
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.impl.DefaultMessage;
+import org.apache.camel.util.ObjectHelper;
 
 /**
  * @version 
@@ -72,4 +72,10 @@ public class HttpMessage extends DefaultMessage {
     private HttpEndpoint getEndpoint() {
         return (HttpEndpoint) getExchange().getFromEndpoint();
     }
+
+    @Override
+    public String toString() {
+        // do not use toString on HTTP message
+        return "HttpMessage@" + ObjectHelper.getIdentityHashCode(this);
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/1ba5aa2f/components/camel-http4/src/main/java/org/apache/camel/component/http4/DefaultHttpBinding.java
----------------------------------------------------------------------
diff --git 
a/components/camel-http4/src/main/java/org/apache/camel/component/http4/DefaultHttpBinding.java
 
b/components/camel-http4/src/main/java/org/apache/camel/component/http4/DefaultHttpBinding.java
index aca11ab..7064c78 100644
--- 
a/components/camel-http4/src/main/java/org/apache/camel/component/http4/DefaultHttpBinding.java
+++ 
b/components/camel-http4/src/main/java/org/apache/camel/component/http4/DefaultHttpBinding.java
@@ -401,13 +401,23 @@ public class DefaultHttpBinding implements HttpBinding {
         // lets assume the body is a reader
         HttpServletRequest request = httpMessage.getRequest();
         // there is only a body if we have a content length, or its -1 to 
indicate unknown length
-        if (request.getContentLength() == 0) {
+        int len = request.getContentLength();
+        LOG.trace("HttpServletRequest content-length: {}", len);
+        if (len == 0) {
             return null;
         }
         if (isUseReaderForPayload()) {
             // use reader to read the response body
             return request.getReader();
         } else {
+            // if we do not know if there is any data at all, then make sure 
to check the stream first
+            if (len < 0) {
+                InputStream is = request.getInputStream();
+                if (is.available() == 0) {
+                    // no data so return null
+                    return null;
+                }
+            }
             // reade the response body from servlet request
             return HttpHelper.readResponseBodyFromServletRequest(request, 
httpMessage.getExchange());
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/1ba5aa2f/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpConverter.java
----------------------------------------------------------------------
diff --git 
a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpConverter.java
 
b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpConverter.java
index 32b7c36..dead494 100644
--- 
a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpConverter.java
+++ 
b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpConverter.java
@@ -85,12 +85,16 @@ public final class HttpConverter {
         if (request == null) {
             return null;
         }
-        if (exchange == null
-            || !exchange.getProperty(Exchange.SKIP_GZIP_ENCODING, 
Boolean.FALSE, Boolean.class)) {
+        InputStream is = request.getInputStream();
+        if (is != null && is.available() <= 0) {
+            // there is no data, so we cannot uncompress etc.
+            return is;
+        }
+        if (exchange == null || 
!exchange.getProperty(Exchange.SKIP_GZIP_ENCODING, Boolean.FALSE, 
Boolean.class)) {
             String contentEncoding = 
request.getHeader(Exchange.CONTENT_ENCODING);
-            return GZIPHelper.uncompressGzip(contentEncoding, 
request.getInputStream());
+            return GZIPHelper.uncompressGzip(contentEncoding, is);
         } else {
-            return request.getInputStream();
+            return is;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/1ba5aa2f/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpMessage.java
----------------------------------------------------------------------
diff --git 
a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpMessage.java
 
b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpMessage.java
index e88c171..30c8af0 100644
--- 
a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpMessage.java
+++ 
b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpMessage.java
@@ -24,6 +24,7 @@ import javax.servlet.http.HttpServletResponse;
 import org.apache.camel.Exchange;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.impl.DefaultMessage;
+import org.apache.camel.util.ObjectHelper;
 
 /**
  * @version 
@@ -71,4 +72,11 @@ public class HttpMessage extends DefaultMessage {
     private HttpEndpoint getEndpoint() {
         return (HttpEndpoint) getExchange().getFromEndpoint();
     }
+
+    @Override
+    public String toString() {
+        // do not use toString on HTTP message
+        return "HttpMessage@" + ObjectHelper.getIdentityHashCode(this);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/1ba5aa2f/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpStreamCacheFileTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpStreamCacheFileTest.java
 
b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpStreamCacheFileTest.java
index c72b418..5be4669 100644
--- 
a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpStreamCacheFileTest.java
+++ 
b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpStreamCacheFileTest.java
@@ -21,6 +21,7 @@ import java.io.File;
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
+import org.apache.camel.StreamCache;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.http.HttpOperationFailedException;
 import org.apache.camel.converter.stream.CachedOutputStream;

Reply via email to