CAMEL-9972: Explicitly add Connection Close HTTP header with a parameter in URI - camel-http
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/5d0759cf Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/5d0759cf Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/5d0759cf Branch: refs/heads/master Commit: 5d0759cf17e126d4241f7ef50fcae23da825b176 Parents: d4ade0f Author: Andrea Cosentino <anco...@gmail.com> Authored: Wed May 18 08:05:16 2016 +0200 Committer: Andrea Cosentino <anco...@gmail.com> Committed: Wed May 18 08:05:16 2016 +0200 ---------------------------------------------------------------------- .../camel/component/http/HttpProducer.java | 4 + .../http/HttpExplicitConnectionCloseTest.java | 79 ++++++++++++++++++++ 2 files changed, 83 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/5d0759cf/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java index ec1b2f1..8e488c5 100644 --- a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java +++ b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java @@ -139,6 +139,10 @@ public class HttpProducer extends DefaultProducer { } } } + + if (getEndpoint().isConnectionClose()) { + method.addRequestHeader("Connection", "close"); + } // lets store the result in the output message. try { http://git-wip-us.apache.org/repos/asf/camel/blob/5d0759cf/components/camel-http/src/test/java/org/apache/camel/component/http/HttpExplicitConnectionCloseTest.java ---------------------------------------------------------------------- diff --git a/components/camel-http/src/test/java/org/apache/camel/component/http/HttpExplicitConnectionCloseTest.java b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpExplicitConnectionCloseTest.java new file mode 100644 index 0000000..7192d63 --- /dev/null +++ b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpExplicitConnectionCloseTest.java @@ -0,0 +1,79 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.http; + +import java.util.List; +import java.util.Map; + +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.Ignore; +import org.junit.Test; + +/** + * @version + */ +public class HttpExplicitConnectionCloseTest extends CamelTestSupport { + protected String expectedText = "activemq"; + + @Test + @Ignore("ignore online tests") + public void testHttpGetConnectionClose() throws Exception { + MockEndpoint mockEndpoint = resolveMandatoryEndpoint("mock:results", MockEndpoint.class); + mockEndpoint.expectedMessageCount(1); + + template.sendBody("direct:start", null); + + mockEndpoint.assertIsSatisfied(); + List<Exchange> list = mockEndpoint.getReceivedExchanges(); + Exchange exchange = list.get(0); + assertNotNull("exchange", exchange); + + Message in = exchange.getIn(); + assertNotNull("in", in); + + Map<String, Object> headers = in.getHeaders(); + + log.debug("Headers: " + headers); + checkHeaders(headers); + + String body = in.getBody(String.class); + + log.debug("Body: " + body); + assertNotNull("Should have a body!", body); + assertTrue("body should contain: " + expectedText, body.contains(expectedText)); + } + + protected void checkHeaders(Map<String, Object> headers) { + assertTrue("Should be more than one header but was: " + headers, headers.size() > 0); + assertEquals("close", headers.get("Connection")); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() { + getContext().addComponent("http2", new HttpComponent()); + from("direct:start").setHeader(Exchange.HTTP_QUERY, constant("hl=en&q=activemq")) + .to("http2://www.google.com/search?connectionClose=true").to("mock:results"); + } + }; + } +}