Updated Branches: refs/heads/master 422da3aac -> 4bf085507
CAMEL-6914 Fixed the issue of sending messages to IPv6 address Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/d3e7083a Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/d3e7083a Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/d3e7083a Branch: refs/heads/master Commit: d3e7083a283d1f5cd07cb245caa99f02a626b80a Parents: 422da3a Author: Willem Jiang <[email protected]> Authored: Fri Dec 27 17:09:24 2013 +0800 Committer: Willem Jiang <[email protected]> Committed: Mon Dec 30 08:53:07 2013 +0800 ---------------------------------------------------------------------- .../java/org/apache/camel/util/URISupport.java | 6 +- .../camel/util/UnsafeUriCharactersEncoder.java | 60 ++++++++++++++------ .../org/apache/camel/util/URISupportTest.java | 6 ++ .../camel/component/ahc/AhcComponent.java | 2 +- .../camel/component/ahc/helper/AhcHelper.java | 4 +- .../component/ahc/HttpEndpointURLTest.java | 30 ++++++++++ .../apache/camel/component/cxf/CxfEndpoint.java | 4 +- .../camel/component/gae/http/GHttpBinding.java | 2 +- .../camel/component/http/HttpComponent.java | 8 ++- .../camel/component/http/helper/HttpHelper.java | 5 +- .../component/http/HttpEndpointURLTest.java | 6 ++ .../camel/component/http4/HttpComponent.java | 3 +- .../component/http4/helper/HttpHelper.java | 4 +- .../component/http4/HttpEndpointURLTest.java | 30 ++++++++++ .../component/jetty/JettyHttpComponent.java | 2 +- .../component/jetty/HttpEndpointURLTest.java | 30 ++++++++++ .../netty/http/NettyHttpComponent.java | 4 +- .../component/netty/http/NettyHttpHelper.java | 4 +- .../HttpServerMultiplexChannelHandler.java | 2 +- .../component/servlet/ServletComponent.java | 2 +- 20 files changed, 175 insertions(+), 39 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/d3e7083a/camel-core/src/main/java/org/apache/camel/util/URISupport.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/util/URISupport.java b/camel-core/src/main/java/org/apache/camel/util/URISupport.java index 52406f4..4b06a13 100644 --- a/camel-core/src/main/java/org/apache/camel/util/URISupport.java +++ b/camel-core/src/main/java/org/apache/camel/util/URISupport.java @@ -464,7 +464,11 @@ public final class URISupport { path = path.substring(0, idx); } - path = UnsafeUriCharactersEncoder.encode(path); + if (u.getScheme().startsWith("http")) { + path = UnsafeUriCharactersEncoder.encodeHttpURI(path); + } else { + path = UnsafeUriCharactersEncoder.encode(path); + } // okay if we have user info in the path and they use @ in username or password, // then we need to encode them (but leave the last @ sign before the hostname) http://git-wip-us.apache.org/repos/asf/camel/blob/d3e7083a/camel-core/src/main/java/org/apache/camel/util/UnsafeUriCharactersEncoder.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/util/UnsafeUriCharactersEncoder.java b/camel-core/src/main/java/org/apache/camel/util/UnsafeUriCharactersEncoder.java index 0a72c8a..9b9445d 100644 --- a/camel-core/src/main/java/org/apache/camel/util/UnsafeUriCharactersEncoder.java +++ b/camel-core/src/main/java/org/apache/camel/util/UnsafeUriCharactersEncoder.java @@ -24,27 +24,45 @@ import java.util.BitSet; * A good source for details is <a href="http://en.wikipedia.org/wiki/Url_encode">wikipedia url encode</a> article. */ public final class UnsafeUriCharactersEncoder { - private static BitSet unsafeCharacters; + private static BitSet unsafeCharactersRfc1738; + private static BitSet unsafeCharactersHttp; private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'a', 'b', 'c', 'd', 'e', 'f'}; static { - unsafeCharacters = new BitSet(256); - unsafeCharacters.set(' '); - unsafeCharacters.set('"'); - unsafeCharacters.set('<'); - unsafeCharacters.set('>'); - unsafeCharacters.set('#'); - unsafeCharacters.set('%'); - unsafeCharacters.set('{'); - unsafeCharacters.set('}'); - unsafeCharacters.set('|'); - unsafeCharacters.set('\\'); - unsafeCharacters.set('^'); - unsafeCharacters.set('~'); - unsafeCharacters.set('['); - unsafeCharacters.set(']'); - unsafeCharacters.set('`'); + unsafeCharactersRfc1738 = new BitSet(256); + unsafeCharactersRfc1738.set(' '); + unsafeCharactersRfc1738.set('"'); + unsafeCharactersRfc1738.set('<'); + unsafeCharactersRfc1738.set('>'); + unsafeCharactersRfc1738.set('#'); + unsafeCharactersRfc1738.set('%'); + unsafeCharactersRfc1738.set('{'); + unsafeCharactersRfc1738.set('}'); + unsafeCharactersRfc1738.set('|'); + unsafeCharactersRfc1738.set('\\'); + unsafeCharactersRfc1738.set('^'); + unsafeCharactersRfc1738.set('~'); + unsafeCharactersRfc1738.set('['); + unsafeCharactersRfc1738.set(']'); + unsafeCharactersRfc1738.set('`'); + } + + static { + unsafeCharactersHttp = new BitSet(256); + unsafeCharactersHttp.set(' '); + unsafeCharactersHttp.set('"'); + unsafeCharactersHttp.set('<'); + unsafeCharactersHttp.set('>'); + unsafeCharactersHttp.set('#'); + unsafeCharactersHttp.set('%'); + unsafeCharactersHttp.set('{'); + unsafeCharactersHttp.set('}'); + unsafeCharactersHttp.set('|'); + unsafeCharactersHttp.set('\\'); + unsafeCharactersHttp.set('^'); + unsafeCharactersHttp.set('~'); + unsafeCharactersHttp.set('`'); } private UnsafeUriCharactersEncoder() { @@ -52,6 +70,14 @@ public final class UnsafeUriCharactersEncoder { } public static String encode(String s) { + return encode(s, unsafeCharactersRfc1738); + } + + public static String encodeHttpURI(String s) { + return encode(s, unsafeCharactersHttp); + } + + public static String encode(String s, BitSet unsafeCharacters) { int n = s == null ? 0 : s.length(); if (n == 0) { return s; http://git-wip-us.apache.org/repos/asf/camel/blob/d3e7083a/camel-core/src/test/java/org/apache/camel/util/URISupportTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/util/URISupportTest.java b/camel-core/src/test/java/org/apache/camel/util/URISupportTest.java index 2c548c7..0e6f1b1 100644 --- a/camel-core/src/test/java/org/apache/camel/util/URISupportTest.java +++ b/camel-core/src/test/java/org/apache/camel/util/URISupportTest.java @@ -94,6 +94,12 @@ public class URISupportTest extends ContextTestSupport { assertEquals(out1, out2); assertTrue("Should have //", out1.startsWith("http://")); assertTrue("Should have //", out2.startsWith("http://")); + + } + + public void testNormalizeIPv6HttpEndpoint() throws Exception { + String result = URISupport.normalizeUri("http://[2a00:8a00:6000:40::1413]:30300/test"); + assertEquals("http://[2a00:8a00:6000:40::1413]:30300/test", result); } public void testNormalizeHttpEndpointUnicodedParameter() throws Exception { http://git-wip-us.apache.org/repos/asf/camel/blob/d3e7083a/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/AhcComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/AhcComponent.java b/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/AhcComponent.java index 90a724f..e16a60f 100644 --- a/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/AhcComponent.java +++ b/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/AhcComponent.java @@ -104,7 +104,7 @@ public class AhcComponent extends HeaderFilterStrategyComponent { } // restructure uri to be based on the parameters left as we dont want to include the Camel internal options - addressUri = UnsafeUriCharactersEncoder.encode(addressUri); + addressUri = UnsafeUriCharactersEncoder.encodeHttpURI(addressUri); URI httpUri = URISupport.createRemainingURI(new URI(addressUri), parameters); endpoint.setHttpUri(httpUri); http://git-wip-us.apache.org/repos/asf/camel/blob/d3e7083a/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/helper/AhcHelper.java ---------------------------------------------------------------------- diff --git a/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/helper/AhcHelper.java b/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/helper/AhcHelper.java index 01c35ab..f64067b 100644 --- a/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/helper/AhcHelper.java +++ b/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/helper/AhcHelper.java @@ -160,7 +160,7 @@ public final class AhcHelper { } // ensure uri is encoded to be valid - uri = UnsafeUriCharactersEncoder.encode(uri); + uri = UnsafeUriCharactersEncoder.encodeHttpURI(uri); return uri; } @@ -186,7 +186,7 @@ public final class AhcHelper { } if (queryString != null) { // need to encode query string - queryString = UnsafeUriCharactersEncoder.encode(queryString); + queryString = UnsafeUriCharactersEncoder.encodeHttpURI(queryString); uri = URISupport.createURIWithQuery(uri, queryString); } return uri; http://git-wip-us.apache.org/repos/asf/camel/blob/d3e7083a/components/camel-ahc/src/test/java/org/apache/camel/component/ahc/HttpEndpointURLTest.java ---------------------------------------------------------------------- diff --git a/components/camel-ahc/src/test/java/org/apache/camel/component/ahc/HttpEndpointURLTest.java b/components/camel-ahc/src/test/java/org/apache/camel/component/ahc/HttpEndpointURLTest.java new file mode 100644 index 0000000..b2c1777 --- /dev/null +++ b/components/camel-ahc/src/test/java/org/apache/camel/component/ahc/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.ahc; + +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.Test; + +public class HttpEndpointURLTest extends CamelTestSupport { + + @Test + public void testHttpEndpointURLWithIPv6() { + AhcEndpoint endpoint = (AhcEndpoint)context.getEndpoint("ahc://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/d3e7083a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java index 0c3984e..c46352b 100644 --- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java +++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java @@ -189,7 +189,7 @@ public class CxfEndpoint extends DefaultEndpoint implements HeaderFilterStrategy // This method is for CxfComponent setting the EndpointUri protected void updateEndpointUri(String endpointUri) { - super.setEndpointUri(UnsafeUriCharactersEncoder.encode(endpointUri)); + super.setEndpointUri(UnsafeUriCharactersEncoder.encodeHttpURI(endpointUri)); } public Producer createProducer() throws Exception { @@ -881,7 +881,7 @@ public class CxfEndpoint extends DefaultEndpoint implements HeaderFilterStrategy } public void setAddress(String address) { - super.setEndpointUri(UnsafeUriCharactersEncoder.encode(address)); + super.setEndpointUri(UnsafeUriCharactersEncoder.encodeHttpURI(address)); this.address = address; } http://git-wip-us.apache.org/repos/asf/camel/blob/d3e7083a/components/camel-gae/src/main/java/org/apache/camel/component/gae/http/GHttpBinding.java ---------------------------------------------------------------------- diff --git a/components/camel-gae/src/main/java/org/apache/camel/component/gae/http/GHttpBinding.java b/components/camel-gae/src/main/java/org/apache/camel/component/gae/http/GHttpBinding.java index 2e8d09f..1493edd 100644 --- a/components/camel-gae/src/main/java/org/apache/camel/component/gae/http/GHttpBinding.java +++ b/components/camel-gae/src/main/java/org/apache/camel/component/gae/http/GHttpBinding.java @@ -164,7 +164,7 @@ public class GHttpBinding implements String uri = exchange.getIn().getHeader(Exchange.HTTP_URI, String.class); String query = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class); if (uri != null && !endpoint.isBridgeEndpoint()) { - return getEndpointUrl(UnsafeUriCharactersEncoder.encode(uri), query); + return getEndpointUrl(UnsafeUriCharactersEncoder.encodeHttpURI(uri), query); } return getEndpointUrl(endpoint.getEndpointUri(), query); } http://git-wip-us.apache.org/repos/asf/camel/blob/d3e7083a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java index 1a86276..fc82cf9 100644 --- a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java +++ b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java @@ -30,6 +30,7 @@ import org.apache.camel.util.CollectionHelper; import org.apache.camel.util.IntrospectionSupport; import org.apache.camel.util.ObjectHelper; import org.apache.camel.util.URISupport; +import org.apache.camel.util.UnsafeUriCharactersEncoder; import org.apache.commons.httpclient.HttpConnectionManager; import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; import org.apache.commons.httpclient.params.HttpClientParams; @@ -198,9 +199,9 @@ public class HttpComponent extends HeaderFilterStrategyComponent { @Override protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { - String addressUri = uri; - if (!uri.startsWith("http:") && !uri.startsWith("https:")) { - addressUri = remaining; + String addressUri = "http://" + remaining; + if (uri.startsWith("https:")) { + addressUri = "https://" + remaining; } Map<String, Object> httpClientParameters = new HashMap<String, Object>(parameters); // must extract well known parameters before we create the endpoint @@ -235,6 +236,7 @@ public class HttpComponent extends HeaderFilterStrategyComponent { // create the configurer to use for this endpoint (authMethods contains the used methods created by the configurer) final Set<AuthMethod> authMethods = new LinkedHashSet<AuthMethod>(); HttpClientConfigurer configurer = createHttpClientConfigurer(parameters, authMethods); + addressUri = UnsafeUriCharactersEncoder.encodeHttpURI(addressUri); URI endpointUri = URISupport.createRemainingURI(new URI(addressUri), httpClientParameters); // create the endpoint and connectionManagerParams already be set http://git-wip-us.apache.org/repos/asf/camel/blob/d3e7083a/components/camel-http/src/main/java/org/apache/camel/component/http/helper/HttpHelper.java ---------------------------------------------------------------------- diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/helper/HttpHelper.java b/components/camel-http/src/main/java/org/apache/camel/component/http/helper/HttpHelper.java index 65b5a03..601696c 100644 --- a/components/camel-http/src/main/java/org/apache/camel/component/http/helper/HttpHelper.java +++ b/components/camel-http/src/main/java/org/apache/camel/component/http/helper/HttpHelper.java @@ -21,6 +21,7 @@ import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; +import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; @@ -212,7 +213,7 @@ public final class HttpHelper { } // ensure uri is encoded to be valid - uri = UnsafeUriCharactersEncoder.encode(uri); + uri = UnsafeUriCharactersEncoder.encodeHttpURI(uri); return uri; } @@ -238,7 +239,7 @@ public final class HttpHelper { } if (queryString != null) { // need to encode query string - queryString = UnsafeUriCharactersEncoder.encode(queryString); + queryString = UnsafeUriCharactersEncoder.encodeHttpURI(queryString); uri = URISupport.createURIWithQuery(uri, queryString); } return uri; http://git-wip-us.apache.org/repos/asf/camel/blob/d3e7083a/components/camel-http/src/test/java/org/apache/camel/component/http/HttpEndpointURLTest.java ---------------------------------------------------------------------- diff --git a/components/camel-http/src/test/java/org/apache/camel/component/http/HttpEndpointURLTest.java b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpEndpointURLTest.java index 2f44225..a9aefe7 100644 --- a/components/camel-http/src/test/java/org/apache/camel/component/http/HttpEndpointURLTest.java +++ b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpEndpointURLTest.java @@ -39,5 +39,11 @@ public class HttpEndpointURLTest extends CamelTestSupport { assertNotNull("We should find the basicAuthenticationConfigurer", basicAuthenticationConfigurer); assertEquals("pa&&word", basicAuthenticationConfigurer.getPassword()); } + + @Test + public void testHttpEndpointURLWithIPv6() { + HttpEndpoint endpoint = (HttpEndpoint)context.getEndpoint("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/d3e7083a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java index 855f40e..db15a64 100644 --- a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java +++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java @@ -216,7 +216,8 @@ public class HttpComponent extends HeaderFilterStrategyComponent { addressUri = "http://" + remaining; } } - addressUri = UnsafeUriCharactersEncoder.encode(addressUri); + + addressUri = UnsafeUriCharactersEncoder.encodeHttpURI(addressUri); URI uriHttpUriAddress = new URI(addressUri); // validate http uri that end-user did not duplicate the http part that can be a common error http://git-wip-us.apache.org/repos/asf/camel/blob/d3e7083a/components/camel-http4/src/main/java/org/apache/camel/component/http4/helper/HttpHelper.java ---------------------------------------------------------------------- diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/helper/HttpHelper.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/helper/HttpHelper.java index 3b72f10..930e566 100644 --- a/components/camel-http4/src/main/java/org/apache/camel/component/http4/helper/HttpHelper.java +++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/helper/HttpHelper.java @@ -196,7 +196,7 @@ public final class HttpHelper { } // ensure uri is encoded to be valid - uri = UnsafeUriCharactersEncoder.encode(uri); + uri = UnsafeUriCharactersEncoder.encodeHttpURI(uri); return uri; } @@ -222,7 +222,7 @@ public final class HttpHelper { } if (queryString != null) { // need to encode query string - queryString = UnsafeUriCharactersEncoder.encode(queryString); + queryString = UnsafeUriCharactersEncoder.encodeHttpURI(queryString); uri = URISupport.createURIWithQuery(uri, queryString); } return uri; http://git-wip-us.apache.org/repos/asf/camel/blob/d3e7083a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpEndpointURLTest.java ---------------------------------------------------------------------- diff --git a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpEndpointURLTest.java b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpEndpointURLTest.java new file mode 100644 index 0000000..d176f2f --- /dev/null +++ b/components/camel-http4/src/test/java/org/apache/camel/component/http4/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.http4; + +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.Test; + +public class HttpEndpointURLTest extends CamelTestSupport { + + @Test + public void testHttpEndpointURLWithIPv6() { + HttpEndpoint endpoint = (HttpEndpoint)context.getEndpoint("http4://[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/d3e7083a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java index e22458c..e23e342 100644 --- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java +++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java @@ -166,7 +166,7 @@ public class JettyHttpComponent extends HttpComponent { Map<String, Object> httpClientParameters = IntrospectionSupport.extractProperties(parameters, "httpClient."); String address = remaining; - URI addressUri = new URI(UnsafeUriCharactersEncoder.encode(address)); + URI addressUri = new URI(UnsafeUriCharactersEncoder.encodeHttpURI(address)); URI endpointUri = URISupport.createRemainingURI(addressUri, parameters); // restructure uri to be based on the parameters left as we dont want to include the Camel internal options URI httpUri = URISupport.createRemainingURI(addressUri, parameters); http://git-wip-us.apache.org/repos/asf/camel/blob/d3e7083a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpEndpointURLTest.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpEndpointURLTest.java b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpEndpointURLTest.java new file mode 100644 index 0000000..5bbde5c --- /dev/null +++ b/components/camel-jetty/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/d3e7083a/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 d305d92..5f617d7 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 @@ -92,7 +92,7 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt } // create the address uri which includes the remainder parameters (which is not configuration parameters for this component) - URI u = new URI(UnsafeUriCharactersEncoder.encode(remaining)); + URI u = new URI(UnsafeUriCharactersEncoder.encodeHttpURI(remaining)); String addressUri = URISupport.createRemainingURI(u, parameters).toString(); NettyHttpEndpoint answer = new NettyHttpEndpoint(addressUri, this, config); @@ -130,7 +130,7 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt @Override protected NettyConfiguration parseConfiguration(NettyConfiguration configuration, String remaining, Map<String, Object> parameters) throws Exception { // ensure uri is encoded to be valid - String safe = UnsafeUriCharactersEncoder.encode(remaining); + String safe = UnsafeUriCharactersEncoder.encodeHttpURI(remaining); URI uri = new URI(safe); configuration.parseURI(uri, parameters, this, "http", "https"); http://git-wip-us.apache.org/repos/asf/camel/blob/d3e7083a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpHelper.java ---------------------------------------------------------------------- diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpHelper.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpHelper.java index da4615b..7491c9b 100644 --- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpHelper.java +++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpHelper.java @@ -194,7 +194,7 @@ public final class NettyHttpHelper { } // ensure uri is encoded to be valid - uri = UnsafeUriCharactersEncoder.encode(uri); + uri = UnsafeUriCharactersEncoder.encodeHttpURI(uri); return uri; } @@ -217,7 +217,7 @@ public final class NettyHttpHelper { } if (queryString != null) { // need to encode query string - queryString = UnsafeUriCharactersEncoder.encode(queryString); + queryString = UnsafeUriCharactersEncoder.encodeHttpURI(queryString); uri = URISupport.createURIWithQuery(uri, queryString); } return uri; http://git-wip-us.apache.org/repos/asf/camel/blob/d3e7083a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java ---------------------------------------------------------------------- diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java index 64d30b2..3351fd8 100644 --- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java +++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java @@ -158,7 +158,7 @@ public class HttpServerMultiplexChannelHandler extends SimpleChannelUpstreamHand path = path.substring(0, path.length() - 1); } - return UnsafeUriCharactersEncoder.encode(path); + return UnsafeUriCharactersEncoder.encodeHttpURI(path); } } http://git-wip-us.apache.org/repos/asf/camel/blob/d3e7083a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java index e9773d9..87699c1 100644 --- a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java +++ b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java @@ -59,7 +59,7 @@ public class ServletComponent extends HttpComponent { HeaderFilterStrategy headerFilterStrategy = resolveAndRemoveReferenceParameter(parameters, "headerFilterStrategy", HeaderFilterStrategy.class); // restructure uri to be based on the parameters left as we dont want to include the Camel internal options - URI httpUri = URISupport.createRemainingURI(new URI(UnsafeUriCharactersEncoder.encode(uri)), parameters); + URI httpUri = URISupport.createRemainingURI(new URI(UnsafeUriCharactersEncoder.encodeHttpURI(uri)), parameters); ServletEndpoint endpoint = createServletEndpoint(uri, this, httpUri, params, getHttpConnectionManager(), configurer); endpoint.setServletName(servletName);
