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 2015/12/10 16:24:11 UTC
[1/2] camel git commit: CAMEL-9382: netty http should be more
friendly in the hostname and support default http as protocol. And whether
people include double slashes or not.
Repository: camel
Updated Branches:
refs/heads/camel-2.16.x 5564ac9ed -> 2a66cb220
refs/heads/master 149648b20 -> 72626b572
CAMEL-9382: netty http should be more friendly in the hostname and support default http as protocol. And whether people include double slashes or not.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/72626b57
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/72626b57
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/72626b57
Branch: refs/heads/master
Commit: 72626b57258ed224486fe4af6caa18fbbbb7313f
Parents: 149648b
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Dec 10 16:22:49 2015 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Dec 10 16:22:49 2015 +0100
----------------------------------------------------------------------
.../netty/http/NettyHttpComponent.java | 26 ++++++++--
.../netty/http/NettyDefaultProtocolTest.java | 54 ++++++++++++++++++++
.../http/NettyHttpProtocolNoSlashTest.java | 54 ++++++++++++++++++++
.../netty4/http/NettyHttpComponent.java | 30 ++++++++---
.../netty4/http/NettyDefaultProtocolTest.java | 53 +++++++++++++++++++
.../http/NettyHttpProtocolNoSlashTest.java | 54 ++++++++++++++++++++
6 files changed, 261 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/72626b57/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
index f551b20..8bc0aea 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
@@ -100,15 +100,31 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt
sharedPort = shared.getPort();
}
- // configure configuration
- config = parseConfiguration(config, remaining, parameters);
+ // we must include the protocol in the remaining
+ boolean hasProtocol = remaining.startsWith("http://") || remaining.startsWith("http:")
+ || remaining.startsWith("https://") || remaining.startsWith("https:");
+ if (!hasProtocol) {
+ // http is the default protocol
+ remaining = "http://" + remaining;
+ }
+ boolean hasSlash = remaining.startsWith("http://") || remaining.startsWith("https://");
+ if (!hasSlash) {
+ // must have double slash after protocol
+ if (remaining.startsWith("http:")) {
+ remaining = "http://" + remaining.substring(5);
+ } else {
+ remaining = "https://" + remaining.substring(6);
+ }
+ }
+ LOG.debug("Netty http url: {}", remaining);
+
// set port on configuration which is either shared or using default values
if (sharedPort != -1) {
config.setPort(sharedPort);
} else if (config.getPort() == -1) {
- if ("http".equals(config.getProtocol())) {
+ if (remaining.startsWith("http:")) {
config.setPort(80);
- } else if ("https".equals(config.getProtocol())) {
+ } else if (remaining.startsWith("https:")) {
config.setPort(443);
}
}
@@ -116,6 +132,8 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt
throw new IllegalArgumentException("Port number must be configured");
}
+ // configure configuration
+ config = parseConfiguration(config, remaining, parameters);
setProperties(config, parameters);
// validate config
http://git-wip-us.apache.org/repos/asf/camel/blob/72626b57/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyDefaultProtocolTest.java
----------------------------------------------------------------------
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyDefaultProtocolTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyDefaultProtocolTest.java
new file mode 100644
index 0000000..4160538
--- /dev/null
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyDefaultProtocolTest.java
@@ -0,0 +1,54 @@
+/**
+ * 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.netty.http;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+public class NettyDefaultProtocolTest extends BaseNettyTest {
+
+ @Test
+ public void testDefaultProtocol() throws Exception {
+ getMockEndpoint("mock:input").expectedBodiesReceived("Hello World");
+ getMockEndpoint("mock:input").expectedHeaderReceived("beer", "yes");
+ getMockEndpoint("mock:input").expectedHeaderReceived("host", "localhost:" + getPort());
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_METHOD, "POST");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_URL, "http://localhost:" + getPort() + "/foo");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_URI, "/foo");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_QUERY, "beer=yes");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_PATH, "");
+
+ String out = template.requestBody("netty-http:localhost:{{port}}/foo?beer=yes", "Hello World", String.class);
+ assertEquals("Bye World", out);
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("netty-http:0.0.0.0:{{port}}/foo")
+ .to("mock:input")
+ .transform().constant("Bye World");
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/72626b57/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpProtocolNoSlashTest.java
----------------------------------------------------------------------
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpProtocolNoSlashTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpProtocolNoSlashTest.java
new file mode 100644
index 0000000..f498423
--- /dev/null
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpProtocolNoSlashTest.java
@@ -0,0 +1,54 @@
+/**
+ * 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.netty.http;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+public class NettyHttpProtocolNoSlashTest extends BaseNettyTest {
+
+ @Test
+ public void testHttpProtocolNoSlash() throws Exception {
+ getMockEndpoint("mock:input").expectedBodiesReceived("Hello World");
+ getMockEndpoint("mock:input").expectedHeaderReceived("beer", "yes");
+ getMockEndpoint("mock:input").expectedHeaderReceived("host", "localhost:" + getPort());
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_METHOD, "POST");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_URL, "http://localhost:" + getPort() + "/foo");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_URI, "/foo");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_QUERY, "beer=yes");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_PATH, "");
+
+ String out = template.requestBody("netty-http:http:localhost:{{port}}/foo?beer=yes", "Hello World", String.class);
+ assertEquals("Bye World", out);
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("netty-http:http:0.0.0.0:{{port}}/foo")
+ .to("mock:input")
+ .transform().constant("Bye World");
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/72626b57/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpComponent.java b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpComponent.java
index 775943b..42e4792 100644
--- a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpComponent.java
+++ b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpComponent.java
@@ -91,6 +91,8 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt
NettyHttpSecurityConfiguration securityConfiguration = resolveAndRemoveReferenceParameter(parameters, "securityConfiguration", NettyHttpSecurityConfiguration.class);
Map<String, Object> securityOptions = IntrospectionSupport.extractProperties(parameters, "securityConfiguration.");
+ NettyHttpBinding bindingFromUri = resolveAndRemoveReferenceParameter(parameters, "nettyHttpBinding", NettyHttpBinding.class);
+
// are we using a shared http server?
int sharedPort = -1;
NettySharedHttpServer shared = resolveAndRemoveReferenceParameter(parameters, "nettySharedHttpServer", NettySharedHttpServer.class);
@@ -100,15 +102,31 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt
sharedPort = shared.getPort();
}
- // configure configuration
- config = parseConfiguration(config, remaining, parameters);
+ // we must include the protocol in the remaining
+ boolean hasProtocol = remaining.startsWith("http://") || remaining.startsWith("http:")
+ || remaining.startsWith("https://") || remaining.startsWith("https:");
+ if (!hasProtocol) {
+ // http is the default protocol
+ remaining = "http://" + remaining;
+ }
+ boolean hasSlash = remaining.startsWith("http://") || remaining.startsWith("https://");
+ if (!hasSlash) {
+ // must have double slash after protocol
+ if (remaining.startsWith("http:")) {
+ remaining = "http://" + remaining.substring(5);
+ } else {
+ remaining = "https://" + remaining.substring(6);
+ }
+ }
+ LOG.debug("Netty http url: {}", remaining);
+
// set port on configuration which is either shared or using default values
if (sharedPort != -1) {
config.setPort(sharedPort);
} else if (config.getPort() == -1) {
- if ("http".equals(config.getProtocol())) {
+ if (remaining.startsWith("http:")) {
config.setPort(80);
- } else if ("https".equals(config.getProtocol())) {
+ } else if (remaining.startsWith("https:")) {
config.setPort(443);
}
}
@@ -116,13 +134,13 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt
throw new IllegalArgumentException("Port number must be configured");
}
+ // configure configuration
+ config = parseConfiguration(config, remaining, parameters);
setProperties(config, parameters);
// validate config
config.validateConfiguration();
- NettyHttpBinding bindingFromUri = resolveAndRemoveReferenceParameter(parameters, "nettyHttpBinding", NettyHttpBinding.class);
-
// create the address uri which includes the remainder parameters (which
// is not configuration parameters for this component)
URI u = new URI(UnsafeUriCharactersEncoder.encodeHttpURI(remaining));
http://git-wip-us.apache.org/repos/asf/camel/blob/72626b57/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyDefaultProtocolTest.java
----------------------------------------------------------------------
diff --git a/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyDefaultProtocolTest.java b/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyDefaultProtocolTest.java
new file mode 100644
index 0000000..af1aa8a
--- /dev/null
+++ b/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyDefaultProtocolTest.java
@@ -0,0 +1,53 @@
+/**
+ * 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.netty4.http;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+public class NettyDefaultProtocolTest extends BaseNettyTest {
+
+ @Test
+ public void testDefaultProtocol() throws Exception {
+ getMockEndpoint("mock:input").expectedBodiesReceived("Hello World");
+ getMockEndpoint("mock:input").expectedHeaderReceived("beer", "yes");
+ getMockEndpoint("mock:input").expectedHeaderReceived("host", "localhost:" + getPort());
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_METHOD, "POST");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_URL, "http://localhost:" + getPort() + "/foo");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_URI, "/foo");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_QUERY, "beer=yes");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_PATH, "");
+
+ String out = template.requestBody("netty4-http:localhost:{{port}}/foo?beer=yes", "Hello World", String.class);
+ assertEquals("Bye World", out);
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("netty4-http:0.0.0.0:{{port}}/foo")
+ .to("mock:input")
+ .transform().constant("Bye World");
+ }
+ };
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/camel/blob/72626b57/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyHttpProtocolNoSlashTest.java
----------------------------------------------------------------------
diff --git a/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyHttpProtocolNoSlashTest.java b/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyHttpProtocolNoSlashTest.java
new file mode 100644
index 0000000..f733ea5
--- /dev/null
+++ b/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyHttpProtocolNoSlashTest.java
@@ -0,0 +1,54 @@
+/**
+ * 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.netty4.http;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+public class NettyHttpProtocolNoSlashTest extends BaseNettyTest {
+
+ @Test
+ public void testHttpProtocolNoSlash() throws Exception {
+ getMockEndpoint("mock:input").expectedBodiesReceived("Hello World");
+ getMockEndpoint("mock:input").expectedHeaderReceived("beer", "yes");
+ getMockEndpoint("mock:input").expectedHeaderReceived("host", "localhost:" + getPort());
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_METHOD, "POST");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_URL, "http://localhost:" + getPort() + "/foo");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_URI, "/foo");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_QUERY, "beer=yes");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_PATH, "");
+
+ String out = template.requestBody("netty4-http:http:localhost:{{port}}/foo?beer=yes", "Hello World", String.class);
+ assertEquals("Bye World", out);
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("netty4-http:http:0.0.0.0:{{port}}/foo")
+ .to("mock:input")
+ .transform().constant("Bye World");
+ }
+ };
+ }
+
+}
[2/2] camel git commit: CAMEL-9382: netty http should be more
friendly in the hostname and support default http as protocol. And whether
people include double slashes or not.
Posted by da...@apache.org.
CAMEL-9382: netty http should be more friendly in the hostname and support default http as protocol. And whether people include double slashes or not.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/2a66cb22
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/2a66cb22
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/2a66cb22
Branch: refs/heads/camel-2.16.x
Commit: 2a66cb22088979fc401d96dcc857a892c8ca0f58
Parents: 5564ac9
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Dec 10 16:22:49 2015 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Dec 10 16:24:03 2015 +0100
----------------------------------------------------------------------
.../netty/http/NettyHttpComponent.java | 26 ++++++++--
.../netty/http/NettyDefaultProtocolTest.java | 54 ++++++++++++++++++++
.../http/NettyHttpProtocolNoSlashTest.java | 54 ++++++++++++++++++++
.../netty4/http/NettyHttpComponent.java | 30 ++++++++---
.../netty4/http/NettyDefaultProtocolTest.java | 53 +++++++++++++++++++
.../http/NettyHttpProtocolNoSlashTest.java | 54 ++++++++++++++++++++
6 files changed, 261 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/2a66cb22/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
index f551b20..8bc0aea 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpComponent.java
@@ -100,15 +100,31 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt
sharedPort = shared.getPort();
}
- // configure configuration
- config = parseConfiguration(config, remaining, parameters);
+ // we must include the protocol in the remaining
+ boolean hasProtocol = remaining.startsWith("http://") || remaining.startsWith("http:")
+ || remaining.startsWith("https://") || remaining.startsWith("https:");
+ if (!hasProtocol) {
+ // http is the default protocol
+ remaining = "http://" + remaining;
+ }
+ boolean hasSlash = remaining.startsWith("http://") || remaining.startsWith("https://");
+ if (!hasSlash) {
+ // must have double slash after protocol
+ if (remaining.startsWith("http:")) {
+ remaining = "http://" + remaining.substring(5);
+ } else {
+ remaining = "https://" + remaining.substring(6);
+ }
+ }
+ LOG.debug("Netty http url: {}", remaining);
+
// set port on configuration which is either shared or using default values
if (sharedPort != -1) {
config.setPort(sharedPort);
} else if (config.getPort() == -1) {
- if ("http".equals(config.getProtocol())) {
+ if (remaining.startsWith("http:")) {
config.setPort(80);
- } else if ("https".equals(config.getProtocol())) {
+ } else if (remaining.startsWith("https:")) {
config.setPort(443);
}
}
@@ -116,6 +132,8 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt
throw new IllegalArgumentException("Port number must be configured");
}
+ // configure configuration
+ config = parseConfiguration(config, remaining, parameters);
setProperties(config, parameters);
// validate config
http://git-wip-us.apache.org/repos/asf/camel/blob/2a66cb22/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyDefaultProtocolTest.java
----------------------------------------------------------------------
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyDefaultProtocolTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyDefaultProtocolTest.java
new file mode 100644
index 0000000..4160538
--- /dev/null
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyDefaultProtocolTest.java
@@ -0,0 +1,54 @@
+/**
+ * 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.netty.http;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+public class NettyDefaultProtocolTest extends BaseNettyTest {
+
+ @Test
+ public void testDefaultProtocol() throws Exception {
+ getMockEndpoint("mock:input").expectedBodiesReceived("Hello World");
+ getMockEndpoint("mock:input").expectedHeaderReceived("beer", "yes");
+ getMockEndpoint("mock:input").expectedHeaderReceived("host", "localhost:" + getPort());
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_METHOD, "POST");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_URL, "http://localhost:" + getPort() + "/foo");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_URI, "/foo");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_QUERY, "beer=yes");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_PATH, "");
+
+ String out = template.requestBody("netty-http:localhost:{{port}}/foo?beer=yes", "Hello World", String.class);
+ assertEquals("Bye World", out);
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("netty-http:0.0.0.0:{{port}}/foo")
+ .to("mock:input")
+ .transform().constant("Bye World");
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/2a66cb22/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpProtocolNoSlashTest.java
----------------------------------------------------------------------
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpProtocolNoSlashTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpProtocolNoSlashTest.java
new file mode 100644
index 0000000..f498423
--- /dev/null
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpProtocolNoSlashTest.java
@@ -0,0 +1,54 @@
+/**
+ * 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.netty.http;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+public class NettyHttpProtocolNoSlashTest extends BaseNettyTest {
+
+ @Test
+ public void testHttpProtocolNoSlash() throws Exception {
+ getMockEndpoint("mock:input").expectedBodiesReceived("Hello World");
+ getMockEndpoint("mock:input").expectedHeaderReceived("beer", "yes");
+ getMockEndpoint("mock:input").expectedHeaderReceived("host", "localhost:" + getPort());
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_METHOD, "POST");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_URL, "http://localhost:" + getPort() + "/foo");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_URI, "/foo");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_QUERY, "beer=yes");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_PATH, "");
+
+ String out = template.requestBody("netty-http:http:localhost:{{port}}/foo?beer=yes", "Hello World", String.class);
+ assertEquals("Bye World", out);
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("netty-http:http:0.0.0.0:{{port}}/foo")
+ .to("mock:input")
+ .transform().constant("Bye World");
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/2a66cb22/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpComponent.java b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpComponent.java
index 775943b..42e4792 100644
--- a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpComponent.java
+++ b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpComponent.java
@@ -91,6 +91,8 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt
NettyHttpSecurityConfiguration securityConfiguration = resolveAndRemoveReferenceParameter(parameters, "securityConfiguration", NettyHttpSecurityConfiguration.class);
Map<String, Object> securityOptions = IntrospectionSupport.extractProperties(parameters, "securityConfiguration.");
+ NettyHttpBinding bindingFromUri = resolveAndRemoveReferenceParameter(parameters, "nettyHttpBinding", NettyHttpBinding.class);
+
// are we using a shared http server?
int sharedPort = -1;
NettySharedHttpServer shared = resolveAndRemoveReferenceParameter(parameters, "nettySharedHttpServer", NettySharedHttpServer.class);
@@ -100,15 +102,31 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt
sharedPort = shared.getPort();
}
- // configure configuration
- config = parseConfiguration(config, remaining, parameters);
+ // we must include the protocol in the remaining
+ boolean hasProtocol = remaining.startsWith("http://") || remaining.startsWith("http:")
+ || remaining.startsWith("https://") || remaining.startsWith("https:");
+ if (!hasProtocol) {
+ // http is the default protocol
+ remaining = "http://" + remaining;
+ }
+ boolean hasSlash = remaining.startsWith("http://") || remaining.startsWith("https://");
+ if (!hasSlash) {
+ // must have double slash after protocol
+ if (remaining.startsWith("http:")) {
+ remaining = "http://" + remaining.substring(5);
+ } else {
+ remaining = "https://" + remaining.substring(6);
+ }
+ }
+ LOG.debug("Netty http url: {}", remaining);
+
// set port on configuration which is either shared or using default values
if (sharedPort != -1) {
config.setPort(sharedPort);
} else if (config.getPort() == -1) {
- if ("http".equals(config.getProtocol())) {
+ if (remaining.startsWith("http:")) {
config.setPort(80);
- } else if ("https".equals(config.getProtocol())) {
+ } else if (remaining.startsWith("https:")) {
config.setPort(443);
}
}
@@ -116,13 +134,13 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt
throw new IllegalArgumentException("Port number must be configured");
}
+ // configure configuration
+ config = parseConfiguration(config, remaining, parameters);
setProperties(config, parameters);
// validate config
config.validateConfiguration();
- NettyHttpBinding bindingFromUri = resolveAndRemoveReferenceParameter(parameters, "nettyHttpBinding", NettyHttpBinding.class);
-
// create the address uri which includes the remainder parameters (which
// is not configuration parameters for this component)
URI u = new URI(UnsafeUriCharactersEncoder.encodeHttpURI(remaining));
http://git-wip-us.apache.org/repos/asf/camel/blob/2a66cb22/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyDefaultProtocolTest.java
----------------------------------------------------------------------
diff --git a/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyDefaultProtocolTest.java b/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyDefaultProtocolTest.java
new file mode 100644
index 0000000..af1aa8a
--- /dev/null
+++ b/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyDefaultProtocolTest.java
@@ -0,0 +1,53 @@
+/**
+ * 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.netty4.http;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+public class NettyDefaultProtocolTest extends BaseNettyTest {
+
+ @Test
+ public void testDefaultProtocol() throws Exception {
+ getMockEndpoint("mock:input").expectedBodiesReceived("Hello World");
+ getMockEndpoint("mock:input").expectedHeaderReceived("beer", "yes");
+ getMockEndpoint("mock:input").expectedHeaderReceived("host", "localhost:" + getPort());
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_METHOD, "POST");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_URL, "http://localhost:" + getPort() + "/foo");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_URI, "/foo");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_QUERY, "beer=yes");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_PATH, "");
+
+ String out = template.requestBody("netty4-http:localhost:{{port}}/foo?beer=yes", "Hello World", String.class);
+ assertEquals("Bye World", out);
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("netty4-http:0.0.0.0:{{port}}/foo")
+ .to("mock:input")
+ .transform().constant("Bye World");
+ }
+ };
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/camel/blob/2a66cb22/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyHttpProtocolNoSlashTest.java
----------------------------------------------------------------------
diff --git a/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyHttpProtocolNoSlashTest.java b/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyHttpProtocolNoSlashTest.java
new file mode 100644
index 0000000..f733ea5
--- /dev/null
+++ b/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyHttpProtocolNoSlashTest.java
@@ -0,0 +1,54 @@
+/**
+ * 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.netty4.http;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+public class NettyHttpProtocolNoSlashTest extends BaseNettyTest {
+
+ @Test
+ public void testHttpProtocolNoSlash() throws Exception {
+ getMockEndpoint("mock:input").expectedBodiesReceived("Hello World");
+ getMockEndpoint("mock:input").expectedHeaderReceived("beer", "yes");
+ getMockEndpoint("mock:input").expectedHeaderReceived("host", "localhost:" + getPort());
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_METHOD, "POST");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_URL, "http://localhost:" + getPort() + "/foo");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_URI, "/foo");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_QUERY, "beer=yes");
+ getMockEndpoint("mock:input").expectedHeaderReceived(Exchange.HTTP_PATH, "");
+
+ String out = template.requestBody("netty4-http:http:localhost:{{port}}/foo?beer=yes", "Hello World", String.class);
+ assertEquals("Bye World", out);
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("netty4-http:http:0.0.0.0:{{port}}/foo")
+ .to("mock:input")
+ .transform().constant("Bye World");
+ }
+ };
+ }
+
+}