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 2010/09/21 16:47:04 UTC

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

Author: davsclaus
Date: Tue Sep 21 14:47:03 2010
New Revision: 999444

URL: http://svn.apache.org/viewvc?rev=999444&view=rev
Log:
CAMEL-2743: Fixed jetty returning back http headers using keys in lowercase.

Added:
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpHeaderCaseTest.java
      - copied, changed from r999286, camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpHeaderTest.java
Modified:
    camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java
    camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/DefaultJettyHttpBinding.java

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=999444&r1=999443&r2=999444&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 Tue Sep 21 14:47:03 2010
@@ -216,11 +216,13 @@ public class DefaultHttpBinding implemen
         }
 
         // append headers
-        for (String key : message.getHeaders().keySet()) {
-            String value = message.getHeader(key, String.class);
-            if (headerFilterStrategy != null
+        // must use entrySet to ensure case of keys is preserved
+        for (Map.Entry<String, Object> entry : message.getHeaders().entrySet()) {
+            String key = entry.getKey();
+            Object value = entry.getValue();
+            if (value != null && headerFilterStrategy != null
                     && !headerFilterStrategy.applyFilterToCamelHeaders(key, value, exchange)) {
-                response.setHeader(key, value);
+                response.setHeader(key, value.toString());
             }
         }
 

Modified: camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/DefaultJettyHttpBinding.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/DefaultJettyHttpBinding.java?rev=999444&r1=999443&r2=999444&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/DefaultJettyHttpBinding.java (original)
+++ camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/DefaultJettyHttpBinding.java Tue Sep 21 14:47:03 2010
@@ -83,6 +83,7 @@ public class DefaultJettyHttpBinding imp
         answer.setBody(extractResponseBody(exchange, httpExchange));
 
         // propagate HTTP response headers
+        // must use entrySet to ensure case of keys is preserved
         for (Map.Entry<String, String> entry : httpExchange.getHeaders().entrySet()) {
             String name = entry.getKey();
             String value = entry.getValue();

Copied: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpHeaderCaseTest.java (from r999286, camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpHeaderTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpHeaderCaseTest.java?p2=camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpHeaderCaseTest.java&p1=camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpHeaderTest.java&r1=999286&r2=999444&rev=999444&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpHeaderTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpHeaderCaseTest.java Tue Sep 21 14:47:03 2010
@@ -16,56 +16,56 @@
  */
 package org.apache.camel.component.jetty;
 
+import java.util.LinkedHashMap;
 import java.util.Map;
-import java.util.Map.Entry;
 
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
-import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.jetty.JettyContentTypeTest.MyBookService;
 import org.apache.camel.test.junit4.CamelTestSupport;
-import org.apache.camel.util.ExchangeHelper;
-import org.apache.camel.util.MessageHelper;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpMethod;
+import org.apache.commons.httpclient.methods.PostMethod;
 import org.junit.Test;
 
-public class HttpHeaderTest extends CamelTestSupport {
+public class HttpHeaderCaseTest extends CamelTestSupport {
 
     @Test
-    public void testHttpHeaders() throws Exception {
-        String result = template.requestBody("direct:start", "hello", String.class);
-        assertEquals("Should send a right http header to the server.", "Find the key!", result);
-       
+    public void testHttpHeaderCase() throws Exception {
+        HttpClient client = new HttpClient();
+        HttpMethod method = new PostMethod("http://localhost:9080/myapp/mytest");
+
+        method.setRequestHeader("clientHeader", "fooBAR");
+        method.setRequestHeader("OTHER", "123");
+        method.setRequestHeader("beer", "Carlsberg");
+
+        client.executeMethod(method);
+
+        assertEquals("Bye World", method.getResponseBodyAsString());
+        assertEquals("aBc123", method.getResponseHeader("MyCaseHeader").getValue());
+        assertEquals("456DEf", method.getResponseHeader("otherCaseHeader").getValue());
     }
 
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
-                from("direct:start").setHeader("SOAPAction", constant("http://xxx.com/interfaces/ticket"))
-                    .setHeader("Content-Type", constant("text/xml; charset=utf-8"))
-                    .setHeader(Exchange.HTTP_PROTOCOL_VERSION, constant("HTTP/1.0"))
-                    .to("http://localhost:9080/myapp/mytest");
-
                 from("jetty:http://localhost:9080/myapp/mytest").process(new Processor() {
-
                     public void process(Exchange exchange) throws Exception {
-                        Map<String, Object> headers = exchange.getIn().getHeaders();
-                        ServletRequest request = exchange.getIn().getHeader(Exchange.HTTP_SERVLET_REQUEST, ServletRequest.class);
-                        assertNotNull(request);
-                        assertEquals("Get a wong http protocol version", request.getProtocol(), "HTTP/1.0");
-                        for (Entry<String, Object> entry : headers.entrySet()) {
-                            if ("SOAPAction".equals(entry.getKey()) && "http://xxx.com/interfaces/ticket".equals(entry.getValue())) {
-                                exchange.getOut().setBody("Find the key!");
-                                return;
-                            }
-                        }
-                        exchange.getOut().setBody("Cannot find the key!");
-                    }
 
+                        // headers received should be in case as well
+                        Map<String, Object> map = new LinkedHashMap<String, Object>();
+                        map.putAll(exchange.getIn().getHeaders());
+
+                        assertEquals("123", map.get("OTHER"));
+                        assertEquals(null, map.get("other"));
+                        assertEquals("Carlsberg", map.get("beer"));
+                        assertEquals(null, map.get("Beer"));
+
+                        exchange.getOut().setBody("Bye World");
+                        exchange.getOut().setHeader("MyCaseHeader", "aBc123");
+                        exchange.getOut().setHeader("otherCaseHeader", "456DEf");
+                    }
                 });
 
             }