You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2010/05/19 13:16:54 UTC

svn commit: r946128 - in /camel/trunk/components: camel-http/src/main/java/org/apache/camel/component/http/ camel-jetty/src/test/java/org/apache/camel/component/jetty/

Author: ningjiang
Date: Wed May 19 11:16:54 2010
New Revision: 946128

URL: http://svn.apache.org/viewvc?rev=946128&view=rev
Log:
CAMEL-2738 Add a option to let the user access the under layer raw inputStream

Modified:
    camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java
    camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java
    camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
    camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
    camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpRouteTest.java

Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java?rev=946128&r1=946127&r2=946128&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java (original)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java Wed May 19 11:16:54 2010
@@ -59,9 +59,12 @@ public class CamelServlet extends HttpSe
 
             // create exchange and set data on it
             Exchange exchange = new DefaultExchange(consumer.getEndpoint(), ExchangePattern.InOut);
-            if ((consumer.getEndpoint()).isBridgeEndpoint()) {
+            if (consumer.getEndpoint().isBridgeEndpoint()) {
                 exchange.setProperty(Exchange.SKIP_GZIP_ENCODING, Boolean.TRUE);
             }
+            if (consumer.getEndpoint().isDisableStreamCache()) {
+                exchange.setProperty(Exchange.DISABLE_STREAM_CACHE, Boolean.TRUE);
+            }
             exchange.setIn(new HttpMessage(exchange, request, response));
 
             // Have the camel process the HTTP exchange.

Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java?rev=946128&r1=946127&r2=946128&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java (original)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java Wed May 19 11:16:54 2010
@@ -313,13 +313,18 @@ public class DefaultHttpBinding implemen
             if (is == null) {
                 return is;
             }
-            // convert the input stream to StreamCache
-            try {
-                CachedOutputStream cos = new CachedOutputStream(httpMessage.getExchange());
-                IOHelper.copy(is, cos);
-                return cos.getStreamCache();
-            } finally {
-                is.close();
+            // convert the input stream to StreamCache if the stream cache is not disabled
+            if (httpMessage.getExchange().getProperty(Exchange.DISABLE_STREAM_CACHE, Boolean.FALSE, Boolean.class)) {
+                return is;
+            } else {
+                try {
+                    CachedOutputStream cos = new CachedOutputStream(httpMessage.getExchange());
+                    IOHelper.copy(is, cos);
+                    return cos.getStreamCache();
+
+                } finally {
+                    is.close();
+                }
             }
              
         }

Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java?rev=946128&r1=946127&r2=946128&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java (original)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java Wed May 19 11:16:54 2010
@@ -205,6 +205,7 @@ public class HttpComponent extends Heade
         Boolean throwExceptionOnFailure = getAndRemoveParameter(parameters, "throwExceptionOnFailure", Boolean.class);
         Boolean bridgeEndpoint = getAndRemoveParameter(parameters, "bridgeEndpoint", Boolean.class);
         Boolean matchOnUriPrefix = getAndRemoveParameter(parameters, "matchOnUriPrefix", Boolean.class);
+        Boolean disableStreamCache = getAndRemoveParameter(parameters, "disableStreamCache", Boolean.class);
         String proxyHost = getAndRemoveParameter(parameters, "proxyHost", String.class);
         Integer proxyPort = getAndRemoveParameter(parameters, "proxyPort", Integer.class);
         String authMethodPriority = getAndRemoveParameter(parameters, "authMethodPriority", String.class);
@@ -254,6 +255,9 @@ public class HttpComponent extends Heade
         if (matchOnUriPrefix != null) {
             endpoint.setMatchOnUriPrefix(matchOnUriPrefix);
         }
+        if (disableStreamCache != null) {
+            endpoint.setDisableStreamCache(disableStreamCache);
+        }
         if (proxyHost != null) {
             endpoint.setProxyHost(proxyHost);
             endpoint.setProxyPort(proxyPort);

Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java?rev=946128&r1=946127&r2=946128&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java (original)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java Wed May 19 11:16:54 2010
@@ -54,6 +54,7 @@ public class HttpEndpoint extends Defaul
     private boolean bridgeEndpoint;
     private boolean matchOnUriPrefix;
     private boolean chunked = true;
+    private boolean disableStreamCache;
     private String proxyHost;
     private int proxyPort;
     private String authMethodPriority;
@@ -272,6 +273,14 @@ public class HttpEndpoint extends Defaul
         this.matchOnUriPrefix = match;
     }
     
+    public boolean isDisableStreamCache() {
+        return this.disableStreamCache;
+    }
+    
+    public void setDisableStreamCache(boolean disable) {
+        this.disableStreamCache = disable;
+    }
+    
     public boolean isChunked() {
         return this.chunked;
     }

Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java?rev=946128&r1=946127&r2=946128&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java (original)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java Wed May 19 11:16:54 2010
@@ -220,6 +220,8 @@ public class HttpProducer extends Defaul
     }
 
     private static InputStream doExtractResponseBody(InputStream is, Exchange exchange) throws IOException {
+        // As httpclient is using a AutoCloseInputStream, it will be closed when the connection is closed
+        // we need to cache the stream for it.
         try {
             CachedOutputStream cos = new CachedOutputStream(exchange);
             IOHelper.copy(is, cos);

Modified: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpRouteTest.java?rev=946128&r1=946127&r2=946128&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpRouteTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpRouteTest.java Wed May 19 11:16:54 2010
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.jetty;
 
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -138,6 +139,16 @@ public class HttpRouteTest extends Camel
         String out = context.getTypeConverter().convertTo(String.class, response);
         assertEquals("Get a wrong output " , "PutParameter", out);
     }
+    
+    @Test
+    public void testDisableStreamCache() throws Exception {
+        String response = 
+            template.requestBodyAndHeader("http://localhost:9083/noStreamCache", 
+                                          new ByteArrayInputStream("This is a test".getBytes()), "Content-Type", "application/xml", String.class);
+        
+        assertEquals("Get a wrong output ", "OK", response);
+    }
+
 
     protected void invokeHttpEndpoint() throws IOException {
         template.requestBodyAndHeader("http://localhost:9280/test", expectedBody, "Content-Type", "application/xml");
@@ -205,6 +216,17 @@ public class HttpRouteTest extends Camel
                     }
 
                 });
+                
+                from("jetty:http://localhost:9083/noStreamCache?disableStreamCache=true").noStreamCaching().process(new Processor() {
+
+                    public void process(Exchange exchange) throws Exception {
+                        InputStream is = (InputStream)exchange.getIn().getBody();
+                        System.out.println(is.getClass());
+                        assertTrue("It should be a raw inputstream", is instanceof org.eclipse.jetty.server.HttpInput);
+                        exchange.getOut().setBody("OK");
+                    }
+                    
+                });
 
             }
         };