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);

Reply via email to