Repository: camel
Updated Branches:
  refs/heads/master 0b78c8318 -> c29946a36


CAMEL-9833: Improve a bit. Also fixed that issue with potentially setting 
content-type two times.


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

Branch: refs/heads/master
Commit: c29946a36c16301a8c2b4da2e1a637a3c3aa7015
Parents: 0b78c83
Author: Claus Ibsen <davscl...@apache.org>
Authored: Thu Apr 7 17:42:05 2016 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Thu Apr 7 17:42:05 2016 +0200

----------------------------------------------------------------------
 .../camel/http/common/DefaultHttpBinding.java   | 77 ++++++++++++--------
 .../http/common/DefaultHttpBindingTest.java     |  3 +
 .../component/jetty9/JettyHttpEndpoint9.java    |  4 +
 .../jetty/HttpBridgeBigFormPostRouteTest.java   | 24 +++---
 4 files changed, 66 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/c29946a3/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java
----------------------------------------------------------------------
diff --git 
a/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java
 
b/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java
index c3a7080..adf5ad1 100644
--- 
a/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java
+++ 
b/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java
@@ -99,17 +99,45 @@ public class DefaultHttpBinding implements HttpBinding {
 
     public void readRequest(HttpServletRequest request, HttpMessage message) {
         LOG.trace("readRequest {}", request);
-        
-        // lets parse the body if mapHttpMessageBody is true
+
+        if (mapHttpMessageHeaders) {
+            readHeaders(request, message);
+        }
         if (mapHttpMessageBody) {
-            message.getBody();
+            readBody(request, message);
         }
-        // populate the headers from the request if mapHttpHeaders is true
-        Map<String, Object> headers = new HashMap<String, Object>();  
-        if (mapHttpMessageHeaders) {
-               headers = message.getHeaders();
+
+        // populate the headers from the request
+        Map<String, Object> headers = message.getHeaders();
+
+        // always store these standard headers
+        // store the method and query and other info in headers as String types
+        String rawPath = getRawPath(request);
+        headers.put(Exchange.HTTP_METHOD, request.getMethod());
+        headers.put(Exchange.HTTP_QUERY, request.getQueryString());
+        headers.put(Exchange.HTTP_URL, request.getRequestURL().toString());
+        headers.put(Exchange.HTTP_URI, request.getRequestURI());
+        headers.put(Exchange.HTTP_PATH, rawPath);
+        // only set content type if not already extracted
+        if (!headers.containsKey(Exchange.CONTENT_TYPE)) {
+            headers.put(Exchange.CONTENT_TYPE, request.getContentType());
+        }
+
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("HTTP method {}", request.getMethod());
+            LOG.trace("HTTP query {}", request.getQueryString());
+            LOG.trace("HTTP url {}", request.getRequestURL());
+            LOG.trace("HTTP uri {}", request.getRequestURI());
+            LOG.trace("HTTP path {}", rawPath);
+            LOG.trace("HTTP content-type {}", 
headers.get(Exchange.CONTENT_TYPE));
         }
-        
+    }
+
+    protected void readHeaders(HttpServletRequest request, HttpMessage 
message) {
+        LOG.trace("readHeaders {}", request);
+
+        Map<String, Object> headers = message.getHeaders();
+
         //apply the headerFilterStrategy
         Enumeration<?> names = request.getHeaderNames();
         while (names.hasMoreElements()) {
@@ -122,11 +150,11 @@ public class DefaultHttpBinding implements HttpBinding {
                 name = Exchange.CONTENT_TYPE;
             }
             if (headerFilterStrategy != null
-                && !headerFilterStrategy.applyFilterToExternalHeaders(name, 
extracted, message.getExchange())) {
+                    && 
!headerFilterStrategy.applyFilterToExternalHeaders(name, extracted, 
message.getExchange())) {
                 HttpHelper.appendHeader(headers, name, extracted);
             }
         }
-                
+
         if (request.getCharacterEncoding() != null) {
             headers.put(Exchange.HTTP_CHARACTER_ENCODING, 
request.getCharacterEncoding());
             message.getExchange().setProperty(Exchange.CHARSET_NAME, 
request.getCharacterEncoding());
@@ -137,29 +165,16 @@ public class DefaultHttpBinding implements HttpBinding {
         } catch (Exception e) {
             throw new RuntimeCamelException("Cannot read request parameters 
due " + e.getMessage(), e);
         }
-        
+    }
+
+    protected void readBody(HttpServletRequest request, HttpMessage message) {
+        LOG.trace("readBody {}", request);
+
+        // lets parse the body
         Object body = message.getBody();
         // reset the stream cache if the body is the instance of StreamCache
         if (body instanceof StreamCache) {
-            ((StreamCache)body).reset();
-        }
-
-        // store the method and query and other info in headers as String types
-        String rawPath = getRawPath(request);
-        headers.put(Exchange.HTTP_METHOD, request.getMethod());
-        headers.put(Exchange.HTTP_QUERY, request.getQueryString());
-        headers.put(Exchange.HTTP_URL, request.getRequestURL().toString());
-        headers.put(Exchange.HTTP_URI, request.getRequestURI());
-        headers.put(Exchange.HTTP_PATH, rawPath);
-        headers.put(Exchange.CONTENT_TYPE, request.getContentType());
-
-        if (LOG.isTraceEnabled()) {
-            LOG.trace("HTTP method {}", request.getMethod());
-            LOG.trace("HTTP query {}", request.getQueryString());
-            LOG.trace("HTTP url {}", request.getRequestURL());
-            LOG.trace("HTTP uri {}", request.getRequestURI());
-            LOG.trace("HTTP path {}", rawPath);
-            LOG.trace("HTTP content-type {}", request.getContentType());
+            ((StreamCache) body).reset();
         }
 
         // if content type is serialized java object, then de-serialize it to 
a Java object
@@ -180,7 +195,7 @@ public class DefaultHttpBinding implements HttpBinding {
                 message.setBody(null);
             }
         }
-        
+
         populateAttachments(request, message);
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/c29946a3/components/camel-http-common/src/test/java/org/apache/camel/http/common/DefaultHttpBindingTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-http-common/src/test/java/org/apache/camel/http/common/DefaultHttpBindingTest.java
 
b/components/camel-http-common/src/test/java/org/apache/camel/http/common/DefaultHttpBindingTest.java
index dbeb01f..5454986 100644
--- 
a/components/camel-http-common/src/test/java/org/apache/camel/http/common/DefaultHttpBindingTest.java
+++ 
b/components/camel-http-common/src/test/java/org/apache/camel/http/common/DefaultHttpBindingTest.java
@@ -35,6 +35,7 @@ public class DefaultHttpBindingTest extends CamelTestSupport {
         assertNotEquals(value, date.toString());
         assertEquals(value, 
DefaultHttpBinding.getHttpDateFormat().format(date));
     }
+
     @Test
     public void testConvertDateTypeConverter() throws Exception {
         DefaultHttpBinding binding = new DefaultHttpBinding();
@@ -44,6 +45,7 @@ public class DefaultHttpBindingTest extends CamelTestSupport {
         String value = binding.convertHeaderValueToString(exchange, date);
         assertEquals(value, date.toString());
     }
+
     @Test
     public void testConvertLocale() throws Exception {
         DefaultHttpBinding binding = new DefaultHttpBinding();
@@ -54,6 +56,7 @@ public class DefaultHttpBindingTest extends CamelTestSupport {
         assertNotEquals(value, l.toString());
         assertEquals("zh-CN", value);
     }
+
     @Test
     public void testConvertLocaleTypeConverter() throws Exception {
         DefaultHttpBinding binding = new DefaultHttpBinding();

http://git-wip-us.apache.org/repos/asf/camel/blob/c29946a3/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/JettyHttpEndpoint9.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/JettyHttpEndpoint9.java
 
b/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/JettyHttpEndpoint9.java
index cdf3bba..27dc781 100644
--- 
a/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/JettyHttpEndpoint9.java
+++ 
b/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/JettyHttpEndpoint9.java
@@ -48,6 +48,10 @@ public class JettyHttpEndpoint9 extends JettyHttpEndpoint {
                 
this.binding.setAllowJavaSerializedObject(getComponent().isAllowJavaSerializedObject());
             }
             this.binding.setHeaderFilterStrategy(getHeaderFilterStrategy());
+            // TODO: this option may not work with jetty9 afair
+            
//this.binding.setEagerCheckContentAvailable(isEagerCheckContentAvailable());
+            this.binding.setMapHttpMessageBody(isMapHttpMessageBody());
+            this.binding.setMapHttpMessageHeaders(isMapHttpMessageHeaders());
         }
         return this.binding;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/c29946a3/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeBigFormPostRouteTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeBigFormPostRouteTest.java
 
b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeBigFormPostRouteTest.java
index 9d4221d..acf3952 100644
--- 
a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeBigFormPostRouteTest.java
+++ 
b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeBigFormPostRouteTest.java
@@ -16,16 +16,14 @@
  */
 package org.apache.camel.component.jetty;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.http.Consts;
 import org.apache.http.HttpEntity;
-import org.apache.http.HttpHost;
 import org.apache.http.NameValuePair;
-import org.apache.http.client.config.RequestConfig;
 import org.apache.http.client.entity.UrlEncodedFormEntity;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpPost;
@@ -83,6 +81,8 @@ public class HttpBridgeBigFormPostRouteTest extends 
BaseJettyTest {
 
     @Test
     public void testHttpClient() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:input");
+        mock.expectedMessageCount(1);
         
         List<NameValuePair> nvps = new ArrayList<NameValuePair>();
         nvps.add(new BasicNameValuePair("param1", LARGE_HEADER_VALUE));
@@ -93,19 +93,16 @@ public class HttpBridgeBigFormPostRouteTest extends 
BaseJettyTest {
         HttpPost httpPost = new HttpPost("http://localhost:"; + port2 + 
"/test/hello");
         httpPost.setEntity(entity);
 
-        HttpHost proxy = new HttpHost("localhost", 8888, "http");
-        RequestConfig config = RequestConfig.custom().setProxy(proxy).build();
-        httpPost.setConfig(config);
-
         CloseableHttpClient httpClient = HttpClients.createDefault();
         try {
             CloseableHttpResponse response = httpClient.execute(httpPost);
             assertEquals(response.getStatusLine().getStatusCode(), 200);
             response.close();
-        } catch (IOException e) {
         } finally {
             httpClient.close();
         }
+
+        mock.assertIsSatisfied();
     }
 
     protected RouteBuilder createRouteBuilder() throws Exception {
@@ -116,9 +113,14 @@ public class HttpBridgeBigFormPostRouteTest extends 
BaseJettyTest {
 
                 errorHandler(noErrorHandler());
 
-                from("jetty:http://localhost:"; + port2 + 
"/test/hello?matchOnUriPrefix=true")
-                    .removeHeaders("formMetaData")
-                    .to("http://localhost:"; + port1 + "?bridgeEndpoint=true");
+                from("jetty:http://localhost:"; + port2 + 
"/test/hello?matchOnUriPrefix=true&mapHttpMessageHeaders=false&mapHttpMessageBody=false")
+                    .log("I was here")
+                    .to("jetty:http://localhost:"; + port1 + 
"?bridgeEndpoint=true");
+
+                from("jetty://http://localhost:"; + port1 + 
"?matchOnUriPrefix=true")
+                    .log("Me too")
+                    .to("mock:input");
+
             }
         };
     }  

Reply via email to