You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/10/09 09:25:12 UTC

[camel] branch main updated: CAMEL-18589: camel-http-common - Fix DefaultHttpBinding extract headers to deal better with headers with multiple keys. Thanks to Praveen Prabhu for the patch.

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new b0066c9ef3c CAMEL-18589: camel-http-common - Fix DefaultHttpBinding extract headers to deal better with headers with multiple keys. Thanks to  Praveen Prabhu for the patch.
b0066c9ef3c is described below

commit b0066c9ef3c47b8a9f801cdb64a6160d91957b5c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Oct 9 11:24:52 2022 +0200

    CAMEL-18589: camel-http-common - Fix DefaultHttpBinding extract headers to deal better with headers with multiple keys. Thanks to  Praveen Prabhu for the patch.
---
 .../camel/http/common/DefaultHttpBinding.java      | 22 +++++++++++++++-------
 .../servlet/rest/RestServletContentTypeTest.java   |  2 +-
 2 files changed, 16 insertions(+), 8 deletions(-)

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 9fa5625c01b..4d0033c5ae2 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
@@ -157,20 +157,28 @@ public class DefaultHttpBinding implements HttpBinding {
 
         Map<String, Object> headers = message.getHeaders();
 
-        //apply the headerFilterStrategy
         Enumeration<?> names = request.getHeaderNames();
         while (names.hasMoreElements()) {
             String name = (String) names.nextElement();
-            String value = request.getHeader(name);
-            // use http helper to extract parameter value as it may contain multiple values
-            Object extracted = HttpHelper.extractHttpParameterValue(value);
             // mapping the content-type
             if (name.equalsIgnoreCase("content-type")) {
                 name = Exchange.CONTENT_TYPE;
             }
-            if (headerFilterStrategy != null
-                    && !headerFilterStrategy.applyFilterToExternalHeaders(name, extracted, message.getExchange())) {
-                HttpHelper.appendHeader(headers, name, extracted);
+            // some implementations like Jetty might return unique header names, while some others might not.
+            // Since we are going to call request.getHeaders() to get all values for a header name,
+            // we only need to process a header once.
+            if (!headers.containsKey(name)) {
+                Enumeration<String> values = request.getHeaders(name);
+                while (values.hasMoreElements()) {
+                    String value = values.nextElement();
+                    // use http helper to extract parameter value as it may contain multiple values
+                    Object extracted = HttpHelper.extractHttpParameterValue(value);
+                    //apply the headerFilterStrategy
+                    if (headerFilterStrategy != null
+                            && !headerFilterStrategy.applyFilterToExternalHeaders(name, extracted, message.getExchange())) {
+                        HttpHelper.appendHeader(headers, name, extracted);
+                    }
+                }
             }
         }
 
diff --git a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/rest/RestServletContentTypeTest.java b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/rest/RestServletContentTypeTest.java
index 5d46a440070..008884c445b 100644
--- a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/rest/RestServletContentTypeTest.java
+++ b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/rest/RestServletContentTypeTest.java
@@ -39,7 +39,7 @@ public class RestServletContentTypeTest extends ServletCamelRouterTestSupport {
                 null);
         WebResponse response = query(req, false);
 
-        assertEquals("{ \"status\": \"ok\" }", response.getText());
+        assertEquals(415, response.getResponseCode());
     }
 
     @Test