Return-Path: Delivered-To: apmail-camel-commits-archive@www.apache.org Received: (qmail 49351 invoked from network); 21 Sep 2010 14:47:30 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 21 Sep 2010 14:47:30 -0000 Received: (qmail 35014 invoked by uid 500); 21 Sep 2010 14:47:30 -0000 Delivered-To: apmail-camel-commits-archive@camel.apache.org Received: (qmail 34963 invoked by uid 500); 21 Sep 2010 14:47:29 -0000 Mailing-List: contact commits-help@camel.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@camel.apache.org Delivered-To: mailing list commits@camel.apache.org Received: (qmail 34956 invoked by uid 99); 21 Sep 2010 14:47:28 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 21 Sep 2010 14:47:28 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 21 Sep 2010 14:47:25 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 4087923888C2; Tue, 21 Sep 2010 14:47:04 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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/ Date: Tue, 21 Sep 2010 14:47:04 -0000 To: commits@camel.apache.org From: davsclaus@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100921144704.4087923888C2@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 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 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 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 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 map = new LinkedHashMap(); + 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"); + } }); }