You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by cs...@apache.org on 2015/01/19 14:44:23 UTC
[09/24] camel git commit: CAMEL-8239 Split jetty8 and jetty9 support
into separate modules
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBindingPreservePostFormUrlEncodedBodyTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBindingPreservePostFormUrlEncodedBodyTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBindingPreservePostFormUrlEncodedBodyTest.java
new file mode 100644
index 0000000..6fa6df0
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBindingPreservePostFormUrlEncodedBodyTest.java
@@ -0,0 +1,66 @@
+/**
+ * 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.jetty;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.http.HttpMethods;
+import org.junit.Test;
+
+public class HttpBindingPreservePostFormUrlEncodedBodyTest extends BaseJettyTest {
+
+ @Test
+ public void testSendToJetty() throws Exception {
+ Exchange exchange = template.request("http://localhost:{{port}}/myapp/myservice?query1=a&query2=b", new Processor() {
+
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setBody("b1=x&b2=y");
+ exchange.getIn().setHeader("content-type", "application/x-www-form-urlencoded");
+ exchange.getIn().setHeader(Exchange.HTTP_METHOD, HttpMethods.POST);
+ }
+
+ });
+ // convert the response to a String
+ String body = exchange.getOut().getBody(String.class);
+ assertEquals("Request message is OK", body);
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() throws Exception {
+ from("jetty:http://localhost:{{port}}/myapp/myservice").process(new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ String body = exchange.getIn().getBody(String.class);
+
+ // for unit testing make sure we got right message
+ assertEquals("The body message is wrong", "b1=x&b2=y", body);
+ assertEquals("Get a wrong query parameter from the message header", "a", exchange.getIn().getHeader("query1"));
+ assertEquals("Get a wrong query parameter from the message header", "b", exchange.getIn().getHeader("query2"));
+ assertEquals("Get a wrong form parameter from the message header", "x", exchange.getIn().getHeader("b1"));
+ assertEquals("Get a wrong form parameter from the message header", "y", exchange.getIn().getHeader("b2"));
+
+ // send a response
+ exchange.getOut().setBody("Request message is OK");
+ }
+ });
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBindingRefTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBindingRefTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBindingRefTest.java
new file mode 100644
index 0000000..22aa8ea
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBindingRefTest.java
@@ -0,0 +1,93 @@
+/**
+ * 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.jetty;
+
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.http.DefaultHttpBinding;
+import org.apache.camel.component.http.HttpEndpoint;
+import org.apache.camel.impl.JndiRegistry;
+import org.junit.Test;
+
+/**
+ * Unit test for http binding ref option.
+ */
+public class HttpBindingRefTest extends BaseJettyTest {
+
+ @Test
+ public void testDefaultHttpBinding() throws Exception {
+ Object out = template.requestBody("http://localhost:{{port}}/myapp/myservice", "Hello World");
+ assertEquals("Bye World", context.getTypeConverter().convertTo(String.class, out));
+ }
+
+ @Test
+ public void testCustomHttpBinding() throws Exception {
+ Object out = template.requestBody("http://localhost:{{port}}/myapp/myotherservice", "Hello World");
+ assertEquals("Something went wrong but we dont care", context.getTypeConverter().convertTo(String.class, out));
+ }
+
+ @Override
+ protected JndiRegistry createRegistry() throws Exception {
+ JndiRegistry jndi = super.createRegistry();
+ HttpEndpoint ep = new HttpEndpoint();
+ jndi.bind("default", new DefaultHttpBinding(ep));
+ jndi.bind("myownbinder", new MyHttpBinding(ep));
+ return jndi;
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ errorHandler(noErrorHandler());
+
+ from("jetty:http://localhost:{{port}}/myapp/myservice?httpBindingRef=default").transform().constant("Bye World");
+
+ from("jetty:http://localhost:{{port}}/myapp/myotherservice?httpBindingRef=myownbinder").process(new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ throw new IllegalStateException("Not implemented");
+ }
+ });
+ }
+ };
+ }
+
+ // START SNIPPET: e1
+ public class MyHttpBinding extends DefaultHttpBinding {
+ public MyHttpBinding(HttpEndpoint ep) {
+ super(ep);
+ }
+ @Override
+ public void doWriteExceptionResponse(Throwable exception, HttpServletResponse response) throws IOException {
+ // we override the doWriteExceptionResponse as we only want to alter the binding how exceptions is
+ // written back to the client.
+
+ // we just return HTTP 200 so the client thinks its okay
+ response.setStatus(200);
+ // and we return this fixed text
+ response.getWriter().write("Something went wrong but we dont care");
+ }
+ }
+ // END SNIPPET: e1
+
+}
+
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeEncodedPathTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeEncodedPathTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeEncodedPathTest.java
new file mode 100644
index 0000000..d1e3410
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeEncodedPathTest.java
@@ -0,0 +1,65 @@
+/**
+ * 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.jetty;
+
+import java.io.ByteArrayInputStream;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+public class HttpBridgeEncodedPathTest extends BaseJettyTest {
+
+ private int port1;
+ private int port2;
+
+ @Test
+ public void testHttpClient() throws Exception {
+ String response = template.requestBodyAndHeader("http://localhost:" + port2 + "/test/hello?param1=%2B447777111222",
+ new ByteArrayInputStream("This is a test".getBytes()), "Content-Type", "text/plain", String.class);
+ assertEquals("Get a wrong response", "param1=+447777111222", response);
+ }
+
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() {
+ port1 = getPort();
+ port2 = getNextPort();
+
+ errorHandler(noErrorHandler());
+
+ Processor serviceProc = new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ // %2B becomes decoded to a space
+ assertEquals(" 447777111222", exchange.getIn().getHeader("param1"));
+ // and in the http query %20 becomes a + sign
+ assertEquals("param1=+447777111222", exchange.getIn().getHeader(Exchange.HTTP_QUERY));
+
+ // send back the query
+ exchange.getOut().setBody(exchange.getIn().getHeader(Exchange.HTTP_QUERY));
+ }
+ };
+ from("jetty:http://localhost:" + port2 + "/test/hello")
+ .to("http://localhost:" + port1 + "?throwExceptionOnFailure=false&bridgeEndpoint=true");
+
+ from("jetty://http://localhost:" + port1 + "?matchOnUriPrefix=true").process(serviceProc);
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeMultipartRouteTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeMultipartRouteTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeMultipartRouteTest.java
new file mode 100644
index 0000000..d5a289d
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeMultipartRouteTest.java
@@ -0,0 +1,99 @@
+/**
+ * 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.jetty;
+
+import java.io.File;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.http.HttpEndpoint;
+import org.apache.camel.impl.DefaultHeaderFilterStrategy;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.methods.multipart.FilePart;
+import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
+import org.apache.commons.httpclient.methods.multipart.Part;
+import org.apache.commons.httpclient.methods.multipart.StringPart;
+import org.junit.Test;
+
+public class HttpBridgeMultipartRouteTest extends BaseJettyTest {
+
+ private int port1;
+ private int port2;
+
+ private static class MultipartHeaderFilterStrategy extends DefaultHeaderFilterStrategy {
+ public MultipartHeaderFilterStrategy() {
+ initialize();
+ }
+
+ protected void initialize() {
+ setLowerCase(true);
+ setOutFilterPattern("(?i)(Camel|org\\.apache\\.camel)[\\.|a-z|A-z|0-9]*");
+ }
+ }
+
+ @Test
+ public void testHttpClient() throws Exception {
+ File jpg = new File("src/test/resources/java.jpg");
+ String body = "TEST";
+ Part[] parts = new Part[] {new StringPart("body", body), new FilePart(jpg.getName(), jpg)};
+
+ PostMethod method = new PostMethod("http://localhost:" + port2 + "/test/hello");
+ MultipartRequestEntity requestEntity = new MultipartRequestEntity(parts, method.getParams());
+ method.setRequestEntity(requestEntity);
+
+ HttpClient client = new HttpClient();
+ client.executeMethod(method);
+
+ String responseBody = method.getResponseBodyAsString();
+ assertEquals(body, responseBody);
+
+ String numAttachments = method.getResponseHeader("numAttachments").getValue();
+ assertEquals(numAttachments, "1");
+ }
+
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() {
+ port1 = getPort();
+ port2 = getNextPort();
+
+ errorHandler(noErrorHandler());
+
+ Processor serviceProc = new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ Message in = exchange.getIn();
+ // put the number of attachments in a response header
+ exchange.getOut().setHeader("numAttachments", in.getAttachments().size());
+ exchange.getOut().setBody(in.getHeader("body"));
+ }
+ };
+
+ HttpEndpoint epOut = getContext().getEndpoint("http://localhost:" + port1 + "?bridgeEndpoint=true&throwExceptionOnFailure=false", HttpEndpoint.class);
+ epOut.setHeaderFilterStrategy(new MultipartHeaderFilterStrategy());
+
+ from("jetty:http://localhost:" + port2 + "/test/hello?enableMultipartFilter=false")
+ .to(epOut);
+
+ from("jetty://http://localhost:" + port1 + "?matchOnUriPrefix=true").process(serviceProc);
+ }
+ };
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeRouteTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeRouteTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeRouteTest.java
new file mode 100644
index 0000000..5303e6a
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeRouteTest.java
@@ -0,0 +1,72 @@
+/**
+ * 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.jetty;
+
+import java.io.ByteArrayInputStream;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+public class HttpBridgeRouteTest extends BaseJettyTest {
+
+ private int port1;
+ private int port2;
+
+ @Test
+ public void testHttpClient() throws Exception {
+ String response = template.requestBodyAndHeader("http://localhost:" + port2 + "/test/hello",
+ new ByteArrayInputStream("This is a test".getBytes()), "Content-Type", "application/xml", String.class);
+ assertEquals("Get a wrong response", "/", response);
+
+ response = template.requestBody("http://localhost:" + port1 + "/hello/world", "hello", String.class);
+ assertEquals("Get a wrong response", "/hello/world", response);
+
+ try {
+ template.requestBody("http://localhost:" + port2 + "/hello/world", "hello", String.class);
+ fail("Expect exception here!");
+ } catch (Exception ex) {
+ assertTrue("We should get a RuntimeCamelException", ex instanceof RuntimeCamelException);
+ }
+ }
+
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() {
+ port1 = getPort();
+ port2 = getNextPort();
+
+ errorHandler(noErrorHandler());
+
+ Processor serviceProc = new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ // get the request URL and copy it to the request body
+ String uri = exchange.getIn().getHeader(Exchange.HTTP_URI, String.class);
+ exchange.getOut().setBody(uri);
+ }
+ };
+ from("jetty:http://localhost:" + port2 + "/test/hello")
+ .to("http://localhost:" + port1 + "?throwExceptionOnFailure=false&bridgeEndpoint=true");
+
+ from("jetty://http://localhost:" + port1 + "?matchOnUriPrefix=true").process(serviceProc);
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpCharacterEncodingTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpCharacterEncodingTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpCharacterEncodingTest.java
new file mode 100644
index 0000000..f27d4ec
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpCharacterEncodingTest.java
@@ -0,0 +1,64 @@
+/**
+ * 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.jetty;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+public class HttpCharacterEncodingTest extends BaseJettyTest {
+
+ @Test
+ public void testSendToJetty() throws Exception {
+ Exchange exchange = template.send("http://localhost:{{port}}/myapp/myservice", new Processor() {
+
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setBody("Hello World Thai Elephant \u0E08");
+ exchange.getIn().setHeader("Content-Type", "text/html; charset=utf-8");
+ }
+
+ });
+ // convert the response to a String
+ String body = exchange.getOut().getBody(String.class);
+ assertEquals("Response message is Thai Elephant \u0E08", body);
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() throws Exception {
+ from("jetty:http://localhost:{{port}}/myapp/myservice").process(new MyBookService());
+ }
+ };
+ }
+
+ public class MyBookService implements Processor {
+ public void process(Exchange exchange) throws Exception {
+ // just get the body as a string
+ String body = exchange.getIn().getBody(String.class);
+
+ // for unit testing make sure we got right message
+ assertEquals("Hello World Thai Elephant \u0E08", body);
+
+ // send a html response
+ exchange.getOut().setHeader("Content-Type", "text/html; charset=utf-8");
+ exchange.getOut().setBody("Response message is Thai Elephant \u0E08");
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpClientRouteEnableChunkedTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpClientRouteEnableChunkedTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpClientRouteEnableChunkedTest.java
new file mode 100644
index 0000000..7d8ba72
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpClientRouteEnableChunkedTest.java
@@ -0,0 +1,84 @@
+/**
+ * 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.jetty;
+
+import java.io.ByteArrayInputStream;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.Test;
+
+public class HttpClientRouteEnableChunkedTest extends BaseJettyTest {
+
+ @Test
+ public void testHttpRouteWithOption() throws Exception {
+ testHttpClient("direct:start2");
+ }
+
+ private void testHttpClient(String uri) throws Exception {
+ System.getProperties().put("HTTPClient.dontChunkRequests", "yes");
+
+ MockEndpoint mockEndpoint = getMockEndpoint("mock:a");
+ mockEndpoint.expectedBodiesReceived("<b>Hello World</b>");
+
+ template.requestBodyAndHeader(uri, new ByteArrayInputStream("This is a test".getBytes()), "Content-Type", "application/xml");
+
+ 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.info("Headers: " + headers);
+
+ assertTrue("Should be more than one header but was: " + headers, headers.size() > 0);
+
+ // should get the Content-Length
+ assertEquals("Should get the transfer-encoding as chunked", "chunked", headers.get("Transfer-Encoding"));
+ // remove the system property
+ System.getProperties().remove("HTTPClient.dontChunkRequests");
+ }
+
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() {
+ errorHandler(noErrorHandler());
+
+ from("direct:start2").to("http://localhost:{{port}}/hello").to("mock:a");
+
+ Processor proc = new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ ByteArrayInputStream bis = new ByteArrayInputStream("<b>Hello World</b>".getBytes());
+ exchange.getOut().setBody(bis);
+ }
+ };
+
+ from("jetty:http://localhost:{{port}}/hello").process(proc);
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpClientRouteTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpClientRouteTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpClientRouteTest.java
new file mode 100644
index 0000000..848cc70
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpClientRouteTest.java
@@ -0,0 +1,147 @@
+/**
+ * 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.jetty;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.Test;
+
+public class HttpClientRouteTest extends BaseJettyTest {
+
+ private int port1;
+ private int port2;
+
+ @Test
+ public void testHttpRouteWithMessageHeader() throws Exception {
+ testHttpClient("direct:start");
+ }
+
+ @Test
+ public void testHttpRouteWithOption() throws Exception {
+ testHttpClient("direct:start2");
+ }
+
+ private void testHttpClient(String uri) throws Exception {
+ System.getProperties().put("HTTPClient.dontChunkRequests", "yes");
+
+ MockEndpoint mockEndpoint = getMockEndpoint("mock:a");
+ mockEndpoint.expectedBodiesReceived("<b>Hello World</b>");
+
+ template.requestBodyAndHeader(uri, new ByteArrayInputStream("This is a test".getBytes()), "Content-Type", "application/xml");
+
+ 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.info("Headers: " + headers);
+
+ assertTrue("Should be more than one header but was: " + headers, headers.size() > 0);
+ }
+
+ @Test
+ public void testHttpRouteWithQuery() throws Exception {
+ MockEndpoint mockEndpoint = getMockEndpoint("mock:a");
+ mockEndpoint.expectedBodiesReceived("@ query");
+
+ template.sendBody("direct:start3", null);
+ mockEndpoint.assertIsSatisfied();
+ }
+
+ @Test
+ public void testHttpRouteWithQueryByHeader() throws Exception {
+ MockEndpoint mockEndpoint = getMockEndpoint("mock:a");
+ mockEndpoint.expectedBodiesReceived("test");
+
+ template.sendBody("direct:start4", "test");
+ mockEndpoint.assertIsSatisfied();
+ }
+
+ @Test
+ public void testHttpRouteWithHttpURI() throws Exception {
+ Exchange exchange = template.send("http://localhost:" + port2 + "/querystring", new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setBody("");
+ exchange.getIn().setHeader(Exchange.HTTP_URI, "http://localhost:" + port2 + "/querystring?id=test");
+ }
+ });
+ assertEquals("Get a wrong response.", "test", exchange.getOut().getBody(String.class));
+ }
+
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() {
+ port1 = getPort();
+ port2 = getNextPort();
+
+ errorHandler(noErrorHandler());
+
+ Processor clientProc = new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ assertIsInstanceOf(InputStream.class, exchange.getIn().getBody());
+ }
+ };
+
+ from("direct:start").to("http://localhost:" + port1 + "/hello").process(clientProc).convertBodyTo(String.class).to("mock:a");
+ from("direct:start2").to("http://localhost:" + port2 + "/hello").to("mock:a");
+ from("direct:start3").to("http://localhost:" + port2 + "/Query%20/test?myQuery=%40%20query").to("mock:a");
+ from("direct:start4").setHeader(Exchange.HTTP_QUERY, simple("id=${body}")).to("http://localhost:" + port2 + "/querystring").to("mock:a");
+
+ Processor proc = new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ ByteArrayInputStream bis = new ByteArrayInputStream("<b>Hello World</b>".getBytes());
+ exchange.getOut().setBody(bis);
+ }
+ };
+ from("jetty:http://localhost:" + port1 + "/hello").process(proc).setHeader(Exchange.HTTP_CHUNKED).constant(false);
+
+ from("jetty:http://localhost:" + port2 + "/hello?chunked=false").process(proc);
+
+ from("jetty:http://localhost:" + port2 + "/Query%20/test").process(new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ exchange.getOut().setBody(exchange.getIn().getHeader("myQuery", String.class));
+ }
+ });
+
+ from("jetty:http://localhost:" + port2 + "/querystring").process(new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ String result = exchange.getIn().getHeader("id", String.class);
+ if (result == null) {
+ result = "No id header";
+ }
+ exchange.getOut().setBody(result);
+ }
+ });
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpConverterTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpConverterTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpConverterTest.java
new file mode 100644
index 0000000..eef0641
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpConverterTest.java
@@ -0,0 +1,131 @@
+/**
+ * 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.jetty;
+
+import java.io.InputStream;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.http.HttpConverter;
+import org.apache.camel.component.http.HttpMessage;
+import org.junit.Test;
+
+/**
+ * @version
+ */
+public class HttpConverterTest extends BaseJettyTest {
+
+ @Override
+ public boolean isUseRouteBuilder() {
+ return false;
+ }
+
+ @Test
+ public void testToServletRequestAndResponse() throws Exception {
+ context.addRoutes(new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("jetty://http://localhost:{{port}}/test")
+ // add this node to make sure the convert can work within DefaultMessageImpl
+ .convertBodyTo(String.class)
+ .process(new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ HttpServletRequest request = exchange.getIn(HttpServletRequest.class);
+ assertNotNull("We should get request object here", request);
+ HttpServletResponse response = exchange.getIn(HttpServletResponse.class);
+ assertNotNull("We should get response object here", response);
+ String s = exchange.getIn().getBody(String.class);
+ assertEquals("Hello World", s);
+ }
+ }).transform(constant("Bye World"));
+ }
+ });
+ context.start();
+
+ String out = template.requestBody("http://localhost:{{port}}/test", "Hello World", String.class);
+ assertEquals("Bye World", out);
+ }
+
+ @Test
+ public void testToServletInputStream() throws Exception {
+ context.addRoutes(new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("jetty://http://localhost:{{port}}/test").
+ process(new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ HttpMessage msg = exchange.getIn(HttpMessage.class);
+
+ ServletInputStream sis = HttpConverter.toServletInputStream(msg);
+ assertNotNull(sis);
+ // The ServletInputStream should be cached and you can't read message here
+ assertTrue(sis.available() == 0);
+ String s = msg.getBody(String.class);
+
+ assertEquals("Hello World", s);
+ }
+ }).transform(constant("Bye World"));
+ }
+ });
+ context.start();
+
+ String out = template.requestBody("http://localhost:{{port}}/test", "Hello World", String.class);
+ assertEquals("Bye World", out);
+ }
+
+ @Test
+ public void testToInputStream() throws Exception {
+ context.addRoutes(new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("jetty://http://localhost:{{port}}/test").
+ process(new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ HttpMessage msg = exchange.getIn(HttpMessage.class);
+
+ InputStream sis = msg.getBody(InputStream.class);
+ assertNotNull(sis);
+ String s = exchange.getContext().getTypeConverter().convertTo(String.class, sis);
+
+ assertEquals("Hello World", s);
+ }
+ }).transform(constant("Bye World"));
+ }
+ });
+ context.start();
+
+ String out = template.requestBody("http://localhost:{{port}}/test", "Hello World", String.class);
+ assertEquals("Bye World", out);
+ }
+
+ @Test
+ public void testNulls() throws Exception {
+ HttpMessage msg = null;
+ assertNull(HttpConverter.toInputStream(msg, null));
+ assertNull(HttpConverter.toServletInputStream(msg));
+ assertNull(HttpConverter.toServletRequest(msg));
+ assertNull(HttpConverter.toServletResponse(msg));
+
+ HttpServletRequest req = null;
+ assertNull(HttpConverter.toInputStream(req, null));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpEndpointURLTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpEndpointURLTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpEndpointURLTest.java
new file mode 100644
index 0000000..5bbde5c
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpEndpointURLTest.java
@@ -0,0 +1,30 @@
+/**
+ * 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.jetty;
+
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class HttpEndpointURLTest extends CamelTestSupport {
+
+ @Test
+ public void testHttpEndpointURLWithIPv6() {
+ JettyHttpEndpoint endpoint = (JettyHttpEndpoint)context.getEndpoint("jetty://http://[2a00:8a00:6000:40::1413]:30300/test?test=true");
+ assertEquals("http://[2a00:8a00:6000:40::1413]:30300/test?test=true", endpoint.getHttpUri().toString());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpEndpointUriEncodingIssueTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpEndpointUriEncodingIssueTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpEndpointUriEncodingIssueTest.java
new file mode 100644
index 0000000..f15e080
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpEndpointUriEncodingIssueTest.java
@@ -0,0 +1,68 @@
+/**
+ * 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.jetty;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class HttpEndpointUriEncodingIssueTest extends BaseJettyTest {
+
+ @Test
+ public void testEndpointUriEncodingIssue() throws Exception {
+ String uri = "http://localhost:{{port}}/myapp/mytest?columns=totalsens,upsens&username=apiuser";
+ String out = template.requestBody(uri, null, String.class);
+
+ assertEquals("We got totalsens,upsens columns", out);
+ }
+
+ @Test
+ public void testEndpointUriWithDanishCharEncodingIssue() throws Exception {
+ String uri = "http://localhost:{{port}}/myapp/mytest?columns=claus,s\u00F8ren&username=apiuser";
+ String out = template.requestBody(uri, null, String.class);
+
+ assertEquals("We got claus,s\u00F8ren columns", out);
+ }
+
+ @Test
+ public void testEndpointHeaderUriEncodingIssue() throws Exception {
+ String uri = "http://localhost:{{port}}/myapp/mytest?columns=totalsens,upsens&username=apiuser";
+ String out = template.requestBodyAndHeader("http://localhost/dummy", null, Exchange.HTTP_URI, uri, String.class);
+
+ assertEquals("We got totalsens,upsens columns", out);
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("jetty:http://localhost:{{port}}/myapp/mytest").process(new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ String columns = exchange.getIn().getHeader("columns", String.class);
+ exchange.getOut().setBody("We got " + columns + " columns");
+ }
+ });
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpFilterCamelHeadersTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpFilterCamelHeadersTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpFilterCamelHeadersTest.java
new file mode 100644
index 0000000..4527062
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpFilterCamelHeadersTest.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.jetty;
+
+import java.util.Map;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.JndiRegistry;
+import org.junit.Test;
+
+/**
+ * @version
+ */
+public class HttpFilterCamelHeadersTest extends BaseJettyTest {
+
+ @Test
+ public void testFilterCamelHeaders() throws Exception {
+ Exchange out = template.send("http://localhost:{{port}}/test/filter", new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setBody("Claus");
+ exchange.getIn().setHeader("bar", 123);
+ }
+ });
+
+ assertNotNull(out);
+ assertEquals("Hi Claus", out.getOut().getBody(String.class));
+
+ // there should be no internal Camel headers
+ // except for the response code
+ Map<String, Object> headers = out.getOut().getHeaders();
+ for (String key : headers.keySet()) {
+ if (!key.equalsIgnoreCase(Exchange.HTTP_RESPONSE_CODE)) {
+ assertTrue("Should not contain any Camel internal headers", !key.toLowerCase().startsWith("camel"));
+ } else {
+ assertEquals(200, headers.get(Exchange.HTTP_RESPONSE_CODE));
+ }
+ }
+ }
+
+ @Override
+ protected JndiRegistry createRegistry() throws Exception {
+ JndiRegistry jndi = super.createRegistry();
+ jndi.bind("foo", new MyFooBean());
+ return jndi;
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("jetty:http://localhost:{{port}}/test/filter").beanRef("foo");
+ }
+ };
+ }
+
+ public static class MyFooBean {
+
+ public String hello(String name) {
+ return "Hi " + name;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpGZipEncodingTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpGZipEncodingTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpGZipEncodingTest.java
new file mode 100644
index 0000000..28efbfc
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpGZipEncodingTest.java
@@ -0,0 +1,100 @@
+/**
+ * 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.jetty;
+
+import java.io.ByteArrayInputStream;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.ExpressionBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+public class HttpGZipEncodingTest extends BaseJettyTest {
+
+ private int port1;
+ private int port2;
+
+ @Test
+ public void testHttpProducerWithGzip() throws Exception {
+ String response = template.requestBodyAndHeader("http://localhost:" + port1 + "/gzip",
+ new ByteArrayInputStream("<Hello>World</Hello>".getBytes()), Exchange.CONTENT_ENCODING, "gzip", String.class);
+ assertEquals("The response is wrong", "<b>Hello World</b>", response);
+ }
+
+ @Test
+ public void testGzipProxy() throws Exception {
+ String response =
+ template.requestBodyAndHeader("http://localhost:" + port2 + "/route",
+ new ByteArrayInputStream("<Hello>World</Hello>".getBytes()), Exchange.CONTENT_ENCODING, "gzip", String.class);
+ assertEquals("The response is wrong", "<b>Hello World</b>", response);
+ }
+
+ @Test
+ public void testGzipProducerWithGzipData() throws Exception {
+ String response = template.requestBodyAndHeader("direct:gzip",
+ new ByteArrayInputStream("<Hello>World</Hello>".getBytes()), Exchange.CONTENT_ENCODING, "gzip", String.class);
+ assertEquals("The response is wrong", "<b>Hello World</b>", response);
+ }
+
+ @Test
+ public void testGzipGet() throws Exception {
+ String response = template.requestBodyAndHeader("http://localhost:" + port1 + "/gzip",
+ null, "Accept-Encoding", "gzip", String.class);
+ assertEquals("The response is wrong", "<b>Hello World for gzip</b>", response);
+ }
+
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() {
+ port1 = getPort();
+ port2 = getNextPort();
+
+ errorHandler(noErrorHandler());
+
+ from("direct:gzip")
+ .marshal().gzip()
+ .setProperty(Exchange.SKIP_GZIP_ENCODING, ExpressionBuilder.constantExpression(Boolean.TRUE))
+ .to("http://localhost:" + port1 + "/gzip").unmarshal().gzip();
+
+ from("jetty:http://localhost:" + port1 + "/gzip").process(new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ // check the request method
+ HttpServletRequest request = exchange.getIn().getHeader(Exchange.HTTP_SERVLET_REQUEST, HttpServletRequest.class);
+ if ("POST".equals(request.getMethod())) {
+ String requestBody = exchange.getIn().getBody(String.class);
+ assertEquals("Get a wrong request string", "<Hello>World</Hello>", requestBody);
+ }
+ exchange.getOut().setHeader(Exchange.CONTENT_ENCODING, "gzip");
+ // check the Accept Encoding header
+ String header = exchange.getIn().getHeader("Accept-Encoding", String.class);
+ if (header != null && header.indexOf("gzip") > -1) {
+ exchange.getOut().setBody("<b>Hello World for gzip</b>");
+ } else {
+ exchange.getOut().setBody("<b>Hello World</b>");
+ }
+ }
+ });
+
+ from("jetty:http://localhost:" + port2 + "/route?bridgeEndpoint=true")
+ .to("http://localhost:" + port1 + "/gzip?bridgeEndpoint=true");
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpHeaderCaseTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpHeaderCaseTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpHeaderCaseTest.java
new file mode 100644
index 0000000..03e8829
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpHeaderCaseTest.java
@@ -0,0 +1,73 @@
+/**
+ * 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.jetty;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+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 HttpHeaderCaseTest extends BaseJettyTest {
+
+ @Test
+ public void testHttpHeaderCase() throws Exception {
+ HttpClient client = new HttpClient();
+ HttpMethod method = new PostMethod("http://localhost:" + getPort() + "/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("jetty:http://localhost:{{port}}/myapp/mytest").process(new Processor() {
+ public void process(Exchange exchange) throws Exception {
+
+ // 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");
+ }
+ });
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpHeaderTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpHeaderTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpHeaderTest.java
new file mode 100644
index 0000000..c3deb50
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpHeaderTest.java
@@ -0,0 +1,95 @@
+/**
+ * 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.jetty;
+
+import java.util.Map;
+import java.util.Map.Entry;
+import javax.servlet.ServletRequest;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+public class HttpHeaderTest extends BaseJettyTest {
+
+ @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);
+ }
+
+ @Test
+ public void testServerHeader() throws Exception {
+ Exchange ex = template.request("http://localhost:{{port}}/server/mytest", new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ // Do nothing here
+ }
+ });
+
+ assertNotNull(ex.getOut().getHeader("Server"));
+ assertNull(ex.getOut().getHeader("Date"));
+
+ ex = template.request("http://localhost:{{port2}}/server/mytest", new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ // Do nothing here
+ }
+ });
+
+ assertNull(ex.getOut().getHeader("Server"));
+ assertNotNull(ex.getOut().getHeader("Date"));
+ }
+
+
+ @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:{{port}}/myapp/mytest");
+
+ from("jetty:http://localhost:{{port}}/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!");
+ }
+ });
+
+ from("jetty:http://localhost:{{port}}/server/mytest").transform(constant("Response!"));
+
+ //The setting only effect on a new server endpoint
+ from("jetty:http://localhost:{{port2}}/server/mytest?sendServerVersion=false&sendDateHeader=true").transform(constant("Response!"));
+
+
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpMethodRestrictTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpMethodRestrictTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpMethodRestrictTest.java
new file mode 100644
index 0000000..8ff3990
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpMethodRestrictTest.java
@@ -0,0 +1,74 @@
+/**
+ * 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.jetty;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.methods.StringRequestEntity;
+import org.junit.Test;
+
+public class HttpMethodRestrictTest extends BaseJettyTest {
+
+ private String getUrl() {
+ return "http://localhost:" + getPort() + "/methodRestrict";
+ }
+
+ @Test
+ public void testProperHttpMethod() throws Exception {
+ HttpClient httpClient = new HttpClient();
+ PostMethod httpPost = new PostMethod(getUrl());
+
+ StringRequestEntity reqEntity = new StringRequestEntity("This is a test", null, null);
+ httpPost.setRequestEntity(reqEntity);
+
+ int status = httpClient.executeMethod(httpPost);
+
+ assertEquals("Get a wrong response status", 200, status);
+
+ String result = httpPost.getResponseBodyAsString();
+ assertEquals("Get a wrong result", "This is a test response", result);
+ }
+
+ @Test
+ public void testImproperHttpMethod() throws Exception {
+ HttpClient httpClient = new HttpClient();
+ GetMethod httpGet = new GetMethod(getUrl());
+ int status = httpClient.executeMethod(httpGet);
+
+ assertEquals("Get a wrong response status", 405, status);
+ }
+
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() throws Exception {
+
+ from("jetty://http://localhost:{{port}}/methodRestrict?httpMethodRestrict=POST").process(new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ Message in = exchange.getIn();
+ String request = in.getBody(String.class);
+ exchange.getOut().setBody(request + " response");
+ }
+ });
+ }
+ };
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpOperationsFailedExceptionUriTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpOperationsFailedExceptionUriTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpOperationsFailedExceptionUriTest.java
new file mode 100644
index 0000000..cc48438
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpOperationsFailedExceptionUriTest.java
@@ -0,0 +1,57 @@
+/**
+ * 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.jetty;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.http.HttpOperationFailedException;
+import org.junit.Test;
+
+/**
+ * @version
+ */
+public class HttpOperationsFailedExceptionUriTest extends BaseJettyTest {
+
+ @Test
+ public void testHttpOperationsFailedExceptionUri() throws Exception {
+ try {
+ template.requestBodyAndHeader("http://localhost:{{port}}/foo?bar=123", null, "foo", 123);
+ fail("Should have thrown an exception");
+ } catch (RuntimeCamelException e) {
+ HttpOperationFailedException cause = assertIsInstanceOf(HttpOperationFailedException.class, e.getCause());
+ assertEquals(500, cause.getStatusCode());
+ assertEquals("http://localhost:" + getPort() + "/foo?bar=123", cause.getUri());
+ }
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("jetty://http://localhost:{{port}}/foo")
+ .process(new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, 500);
+ }
+ });
+ }
+ };
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpPollingConsumerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpPollingConsumerTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpPollingConsumerTest.java
new file mode 100644
index 0000000..41f1c59
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpPollingConsumerTest.java
@@ -0,0 +1,63 @@
+/**
+ * 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.jetty;
+
+import java.net.SocketTimeoutException;
+
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+/**
+ * @version
+ */
+public class HttpPollingConsumerTest extends BaseJettyTest {
+
+ @Test
+ public void testReceive() throws Exception {
+ String body = consumer.receiveBody("http://localhost:{{port}}/test", String.class);
+ assertEquals("Bye World", body);
+ }
+
+ @Test
+ public void testReceiveTimeout() throws Exception {
+ String body = consumer.receiveBody("http://localhost:{{port}}/test", 5000, String.class);
+ assertEquals("Bye World", body);
+ }
+
+ @Test
+ public void testReceiveTimeoutTriggered() throws Exception {
+ try {
+ consumer.receiveBody("http://localhost:{{port}}/test", 250, String.class);
+ fail("Should have thrown an exception");
+ } catch (RuntimeCamelException e) {
+ assertIsInstanceOf(SocketTimeoutException.class, e.getCause());
+ }
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("jetty://http://localhost:{{port}}/test")
+ .delay(2000).transform(constant("Bye World"));
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpPollingGetTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpPollingGetTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpPollingGetTest.java
new file mode 100644
index 0000000..9e3a3cf
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpPollingGetTest.java
@@ -0,0 +1,76 @@
+/**
+ * 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.jetty;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.Test;
+
+/**
+ * @version
+ */
+public class HttpPollingGetTest extends BaseJettyTest {
+
+ protected String expectedText = "<html";
+
+ @Test
+ public void testHttpPollingGet() throws Exception {
+ MockEndpoint mockEndpoint = resolveMandatoryEndpoint("mock:results", MockEndpoint.class);
+ mockEndpoint.expectedMinimumMessageCount(1);
+
+ 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);
+ assertTrue("Should be more than one header but was: " + headers, headers.size() > 0);
+
+ String body = in.getBody(String.class);
+
+ log.debug("Body: " + body);
+ assertNotNull("Should have a body!", body);
+ assertTrue("body should contain: " + expectedText, body.contains(expectedText));
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() {
+ from("http://localhost:{{port}}/myservice?delay=5000").to("mock:results");
+
+ from("jetty:http://localhost:{{port}}/myservice").process(new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ exchange.getOut().setBody("<html>Bye World</html>");
+ }
+ });
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpProducerByteTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpProducerByteTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpProducerByteTest.java
new file mode 100644
index 0000000..a03986d
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpProducerByteTest.java
@@ -0,0 +1,44 @@
+/**
+ * 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.jetty;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+/**
+ * @version
+ */
+public class HttpProducerByteTest extends BaseJettyTest {
+
+ @Test
+ public void testHttpProducerByteTest() throws Exception {
+ byte[] data = "Hello World".getBytes();
+ String out = template.requestBody("http://localhost:{{port}}/test", data, String.class);
+ assertEquals("Bye World", out);
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("jetty://http://localhost:{{port}}/test").transform(constant("Bye World"));
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpProducerConcurrentTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpProducerConcurrentTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpProducerConcurrentTest.java
new file mode 100644
index 0000000..a9361eb
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpProducerConcurrentTest.java
@@ -0,0 +1,92 @@
+/**
+ * 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.jetty;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+/**
+ * HTTP producer concurrent test.
+ *
+ * @version
+ */
+public class HttpProducerConcurrentTest extends BaseJettyTest {
+
+ @Test
+ public void testNoConcurrentProducers() throws Exception {
+ doSendMessages(1, 1);
+ }
+
+ @Test
+ public void testConcurrentProducers() throws Exception {
+ doSendMessages(10, 5);
+ }
+
+ private void doSendMessages(int files, int poolSize) throws Exception {
+ getMockEndpoint("mock:result").expectedMessageCount(files);
+ getMockEndpoint("mock:result").assertNoDuplicates(body());
+
+ ExecutorService executor = Executors.newFixedThreadPool(poolSize);
+ // we access the responses Map below only inside the main thread,
+ // so no need for a thread-safe Map implementation
+ Map<Integer, Future<String>> responses = new HashMap<Integer, Future<String>>();
+ for (int i = 0; i < files; i++) {
+ final int index = i;
+ Future<String> out = executor.submit(new Callable<String>() {
+ public String call() throws Exception {
+ return template.requestBody("http://localhost:{{port}}/echo", "" + index, String.class);
+ }
+ });
+ responses.put(index, out);
+ }
+
+ assertMockEndpointsSatisfied();
+
+ assertEquals(files, responses.size());
+
+ // get all responses
+ Set<String> unique = new HashSet<String>();
+ for (Future<String> future : responses.values()) {
+ unique.add(future.get());
+ }
+
+ // should be 'files' unique responses
+ assertEquals("Should be " + files + " unique responses", files, unique.size());
+ executor.shutdownNow();
+ }
+
+
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() throws Exception {
+ // expose a echo service
+ from("jetty:http://localhost:{{port}}/echo")
+ .transform(body().append(body())).to("mock:result");
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/8b2a8877/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpProducerJMXBeansIssueTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpProducerJMXBeansIssueTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpProducerJMXBeansIssueTest.java
new file mode 100644
index 0000000..15a71a2
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpProducerJMXBeansIssueTest.java
@@ -0,0 +1,80 @@
+/**
+ * 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.jetty;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @version
+ */
+public class HttpProducerJMXBeansIssueTest extends BaseJettyTest {
+
+ private static final Logger LOG = LoggerFactory.getLogger(HttpProducerJMXBeansIssueTest.class);
+
+ @Override
+ public void setUp() throws Exception {
+ // to enable the JMX connector
+ enableJMX();
+ System.setProperty("org.apache.camel.jmx.createRmiConnector", "True");
+ super.setUp();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("jetty:http://localhost:{{port}}/leak").transform(constant("Bye World"));
+
+ from("direct:leak").process(new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ LOG.debug("URL is: " + exchange.getIn().getHeader("url"));
+ }
+ }).recipientList(header("url"));
+ }
+ };
+ }
+
+ @Test
+ public void testNothing() {
+ // do nothing as this test is manual
+ }
+
+ // @Test
+ // TODO: disabled as this is a manual test
+ public void testSendAlot() throws Exception {
+ Endpoint ep = context.getEndpoint("direct:leak");
+ Producer p = ep.createProducer();
+ p.start();
+
+ for (int i = 0; i < 10000; i++) {
+ Exchange ex = ep.createExchange();
+ ex.getIn().setHeader("url", "http://localhost:{{port}}/leak?id=" + i);
+ p.process(ex);
+ }
+
+ p.stop();
+ }
+
+}