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 2016/02/25 10:39:18 UTC

[1/2] camel git commit: CAMEL-9640 - Query string gets decoded when bridging from netty*-http to netty*-http

Repository: camel
Updated Branches:
  refs/heads/camel-2.16.x dbae5f1b8 -> 2314e218d
  refs/heads/master 8fd524944 -> a0412598b


CAMEL-9640 - Query string gets decoded when bridging from netty*-http to netty*-http


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/a0412598
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/a0412598
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/a0412598

Branch: refs/heads/master
Commit: a0412598b97c51f09dc2567058122034f035a140
Parents: 8fd5249
Author: Tadayoshi Sato <sa...@gmail.com>
Authored: Wed Feb 24 20:37:21 2016 +0900
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Feb 25 10:36:44 2016 +0100

----------------------------------------------------------------------
 .../apache/camel/http/common/HttpHelper.java    |  2 +-
 .../component/netty/http/NettyHttpHelper.java   |  8 +++-
 .../netty/http/NettyHttpProducerBridgeTest.java | 41 ++++++++++++++++++++
 .../component/netty4/http/NettyHttpHelper.java  |  8 +++-
 .../http/NettyHttpProducerBridgeTest.java       | 41 ++++++++++++++++++++
 5 files changed, 95 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/a0412598/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java
----------------------------------------------------------------------
diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java
index 2365eb6..08f2e2d 100644
--- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java
+++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java
@@ -320,7 +320,7 @@ public final class HttpHelper {
         if (queryString == null) {
             queryString = endpoint.getHttpUri().getRawQuery();
         }
-        // We should user the query string from the HTTP_URI header
+        // We should use the query string from the HTTP_URI header
         if (queryString == null) {
             queryString = uri.getRawQuery();
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/a0412598/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 45cc8f2..cea0b0a4 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
@@ -236,8 +236,12 @@ public final class NettyHttpHelper {
      */
     public static URI createURI(Exchange exchange, String url, NettyHttpEndpoint endpoint) throws URISyntaxException {
         URI uri = new URI(url);
-        // is a query string provided in the endpoint URI or in a header (header overrules endpoint)
-        String queryString = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class);
+        // is a query string provided in the endpoint URI or in a header
+        // (header overrules endpoint, raw query header overrules query header)
+        String queryString = exchange.getIn().getHeader(Exchange.HTTP_RAW_QUERY, String.class);
+        if (queryString == null) {
+            queryString = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class);
+        }
         if (queryString == null) {
             // use raw as we encode just below
             queryString = uri.getRawQuery();

http://git-wip-us.apache.org/repos/asf/camel/blob/a0412598/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpProducerBridgeTest.java
----------------------------------------------------------------------
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpProducerBridgeTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpProducerBridgeTest.java
index f6e454c..6237093 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpProducerBridgeTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpProducerBridgeTest.java
@@ -16,13 +16,17 @@
  */
 package org.apache.camel.component.netty.http;
 
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
 public class NettyHttpProducerBridgeTest extends BaseNettyTest {
 
     private int port1;
     private int port2;
+    private int port3;
 
     @Test
     public void testProxy() throws Exception {
@@ -30,6 +34,39 @@ public class NettyHttpProducerBridgeTest extends BaseNettyTest {
         assertEquals("Bye World", reply);
     }
 
+    @Test
+    public void testBridgeWithQuery() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:query");
+        mock.message(0).header(Exchange.HTTP_RAW_QUERY).isEqualTo("x=%3B");
+        mock.message(0).header(Exchange.HTTP_QUERY).isEqualTo("x=;");
+
+        template.request("netty-http:http://localhost:" + port3 + "/query?bridgeEndpoint=true", new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(Exchange.HTTP_URI, "http://host:8080/");
+                exchange.getIn().setHeader(Exchange.HTTP_QUERY, "x=%3B");
+            }
+        });
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testBridgeWithRawQueryAndQuery() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:query");
+        mock.message(0).header(Exchange.HTTP_RAW_QUERY).isEqualTo("x=%3B");
+        mock.message(0).header(Exchange.HTTP_QUERY).isEqualTo("x=;");
+
+        template.request("netty-http:http://localhost:" + port3 + "/query?bridgeEndpoint=true", new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(Exchange.HTTP_URI, "http://host:8080/");
+                exchange.getIn().setHeader(Exchange.HTTP_RAW_QUERY, "x=%3B");
+                exchange.getIn().setHeader(Exchange.HTTP_QUERY, "x=;");
+            }
+        });
+        assertMockEndpointsSatisfied();
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
@@ -37,12 +74,16 @@ public class NettyHttpProducerBridgeTest extends BaseNettyTest {
             public void configure() throws Exception {
                 port1 = getPort();
                 port2 = getNextPort();
+                port3 = getNextPort();
 
                 from("netty-http:http://0.0.0.0:" + port1 + "/foo")
                         .to("netty-http:http://localhost:" + port2 + "/bar?bridgeEndpoint=true&throwExceptionOnFailure=false");
 
                 from("netty-http:http://0.0.0.0:" + port2 + "/bar")
                         .transform().simple("Bye ${body}");
+
+                from("netty-http:http://0.0.0.0:" + port3 + "/query")
+                        .to("mock:query");
             }
         };
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/a0412598/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpHelper.java
----------------------------------------------------------------------
diff --git a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpHelper.java b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpHelper.java
index 330d79c..e5d3c4f 100644
--- a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpHelper.java
+++ b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpHelper.java
@@ -236,8 +236,12 @@ public final class NettyHttpHelper {
      */
     public static URI createURI(Exchange exchange, String url, NettyHttpEndpoint endpoint) throws URISyntaxException {
         URI uri = new URI(url);
-        // is a query string provided in the endpoint URI or in a header (header overrules endpoint)
-        String queryString = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class);
+        // is a query string provided in the endpoint URI or in a header
+        // (header overrules endpoint, raw query header overrules query header)
+        String queryString = exchange.getIn().getHeader(Exchange.HTTP_RAW_QUERY, String.class);
+        if (queryString == null) {
+            queryString = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class);
+        }
         if (queryString == null) {
             // use raw as we encode just below
             queryString = uri.getRawQuery();

http://git-wip-us.apache.org/repos/asf/camel/blob/a0412598/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyHttpProducerBridgeTest.java
----------------------------------------------------------------------
diff --git a/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyHttpProducerBridgeTest.java b/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyHttpProducerBridgeTest.java
index ecee0c5..4b2cf7f 100644
--- a/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyHttpProducerBridgeTest.java
+++ b/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyHttpProducerBridgeTest.java
@@ -16,13 +16,17 @@
  */
 package org.apache.camel.component.netty4.http;
 
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
 public class NettyHttpProducerBridgeTest extends BaseNettyTest {
 
     private int port1;
     private int port2;
+    private int port3;
 
     @Test
     public void testProxy() throws Exception {
@@ -30,6 +34,39 @@ public class NettyHttpProducerBridgeTest extends BaseNettyTest {
         assertEquals("Bye World", reply);
     }
 
+    @Test
+    public void testBridgeWithQuery() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:query");
+        mock.message(0).header(Exchange.HTTP_RAW_QUERY).isEqualTo("x=%3B");
+        mock.message(0).header(Exchange.HTTP_QUERY).isEqualTo("x=;");
+
+        template.request("netty4-http:http://localhost:" + port3 + "/query?bridgeEndpoint=true", new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(Exchange.HTTP_URI, "http://host:8080/");
+                exchange.getIn().setHeader(Exchange.HTTP_QUERY, "x=%3B");
+            }
+        });
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testBridgeWithRawQueryAndQuery() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:query");
+        mock.message(0).header(Exchange.HTTP_RAW_QUERY).isEqualTo("x=%3B");
+        mock.message(0).header(Exchange.HTTP_QUERY).isEqualTo("x=;");
+
+        template.request("netty4-http:http://localhost:" + port3 + "/query?bridgeEndpoint=true", new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(Exchange.HTTP_URI, "http://host:8080/");
+                exchange.getIn().setHeader(Exchange.HTTP_RAW_QUERY, "x=%3B");
+                exchange.getIn().setHeader(Exchange.HTTP_QUERY, "x=;");
+            }
+        });
+        assertMockEndpointsSatisfied();
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
@@ -37,12 +74,16 @@ public class NettyHttpProducerBridgeTest extends BaseNettyTest {
             public void configure() throws Exception {
                 port1 = getPort();
                 port2 = getNextPort();
+                port3 = getNextPort();
 
                 from("netty4-http:http://0.0.0.0:" + port1 + "/foo")
                         .to("netty4-http:http://localhost:" + port2 + "/bar?bridgeEndpoint=true&throwExceptionOnFailure=false");
 
                 from("netty4-http:http://0.0.0.0:" + port2 + "/bar")
                         .transform().simple("Bye ${body}");
+
+                from("netty4-http:http://0.0.0.0:" + port3 + "/query")
+                        .to("mock:query");
             }
         };
     }


[2/2] camel git commit: CAMEL-9640 - Query string gets decoded when bridging from netty*-http to netty*-http

Posted by da...@apache.org.
CAMEL-9640 - Query string gets decoded when bridging from netty*-http to netty*-http


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/2314e218
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/2314e218
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/2314e218

Branch: refs/heads/camel-2.16.x
Commit: 2314e218ddcf1b21e18015c7d2bd30525fada98b
Parents: dbae5f1
Author: Tadayoshi Sato <sa...@gmail.com>
Authored: Wed Feb 24 20:37:21 2016 +0900
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Feb 25 10:39:08 2016 +0100

----------------------------------------------------------------------
 .../apache/camel/http/common/HttpHelper.java    |  2 +-
 .../component/netty/http/NettyHttpHelper.java   |  8 +++-
 .../netty/http/NettyHttpProducerBridgeTest.java | 41 ++++++++++++++++++++
 .../component/netty4/http/NettyHttpHelper.java  |  8 +++-
 .../http/NettyHttpProducerBridgeTest.java       | 41 ++++++++++++++++++++
 5 files changed, 95 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/2314e218/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java
----------------------------------------------------------------------
diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java
index 2365eb6..08f2e2d 100644
--- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java
+++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java
@@ -320,7 +320,7 @@ public final class HttpHelper {
         if (queryString == null) {
             queryString = endpoint.getHttpUri().getRawQuery();
         }
-        // We should user the query string from the HTTP_URI header
+        // We should use the query string from the HTTP_URI header
         if (queryString == null) {
             queryString = uri.getRawQuery();
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/2314e218/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 45cc8f2..cea0b0a4 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
@@ -236,8 +236,12 @@ public final class NettyHttpHelper {
      */
     public static URI createURI(Exchange exchange, String url, NettyHttpEndpoint endpoint) throws URISyntaxException {
         URI uri = new URI(url);
-        // is a query string provided in the endpoint URI or in a header (header overrules endpoint)
-        String queryString = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class);
+        // is a query string provided in the endpoint URI or in a header
+        // (header overrules endpoint, raw query header overrules query header)
+        String queryString = exchange.getIn().getHeader(Exchange.HTTP_RAW_QUERY, String.class);
+        if (queryString == null) {
+            queryString = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class);
+        }
         if (queryString == null) {
             // use raw as we encode just below
             queryString = uri.getRawQuery();

http://git-wip-us.apache.org/repos/asf/camel/blob/2314e218/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpProducerBridgeTest.java
----------------------------------------------------------------------
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpProducerBridgeTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpProducerBridgeTest.java
index 95109f4..15ef988 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpProducerBridgeTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpProducerBridgeTest.java
@@ -16,13 +16,17 @@
  */
 package org.apache.camel.component.netty.http;
 
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
 public class NettyHttpProducerBridgeTest extends BaseNettyTest {
 
     private int port1;
     private int port2;
+    private int port3;
 
     @Test
     public void testProxy() throws Exception {
@@ -30,6 +34,39 @@ public class NettyHttpProducerBridgeTest extends BaseNettyTest {
         assertEquals("Bye World", reply);
     }
 
+    @Test
+    public void testBridgeWithQuery() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:query");
+        mock.message(0).header(Exchange.HTTP_RAW_QUERY).isEqualTo("x=%3B");
+        mock.message(0).header(Exchange.HTTP_QUERY).isEqualTo("x=;");
+
+        template.request("netty-http:http://localhost:" + port3 + "/query?bridgeEndpoint=true", new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(Exchange.HTTP_URI, "http://host:8080/");
+                exchange.getIn().setHeader(Exchange.HTTP_QUERY, "x=%3B");
+            }
+        });
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testBridgeWithRawQueryAndQuery() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:query");
+        mock.message(0).header(Exchange.HTTP_RAW_QUERY).isEqualTo("x=%3B");
+        mock.message(0).header(Exchange.HTTP_QUERY).isEqualTo("x=;");
+
+        template.request("netty-http:http://localhost:" + port3 + "/query?bridgeEndpoint=true", new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(Exchange.HTTP_URI, "http://host:8080/");
+                exchange.getIn().setHeader(Exchange.HTTP_RAW_QUERY, "x=%3B");
+                exchange.getIn().setHeader(Exchange.HTTP_QUERY, "x=;");
+            }
+        });
+        assertMockEndpointsSatisfied();
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
@@ -37,12 +74,16 @@ public class NettyHttpProducerBridgeTest extends BaseNettyTest {
             public void configure() throws Exception {
                 port1 = getPort();
                 port2 = getNextPort();
+                port3 = getNextPort();
 
                 from("netty-http:http://0.0.0.0:" + port1 + "/foo")
                         .to("netty-http:http://0.0.0.0:" + port2 + "/bar?bridgeEndpoint=true&throwExceptionOnFailure=false");
 
                 from("netty-http:http://0.0.0.0:" + port2 + "/bar")
                         .transform().simple("Bye ${body}");
+
+                from("netty-http:http://0.0.0.0:" + port3 + "/query")
+                        .to("mock:query");
             }
         };
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/2314e218/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpHelper.java
----------------------------------------------------------------------
diff --git a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpHelper.java b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpHelper.java
index 330d79c..e5d3c4f 100644
--- a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpHelper.java
+++ b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpHelper.java
@@ -236,8 +236,12 @@ public final class NettyHttpHelper {
      */
     public static URI createURI(Exchange exchange, String url, NettyHttpEndpoint endpoint) throws URISyntaxException {
         URI uri = new URI(url);
-        // is a query string provided in the endpoint URI or in a header (header overrules endpoint)
-        String queryString = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class);
+        // is a query string provided in the endpoint URI or in a header
+        // (header overrules endpoint, raw query header overrules query header)
+        String queryString = exchange.getIn().getHeader(Exchange.HTTP_RAW_QUERY, String.class);
+        if (queryString == null) {
+            queryString = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class);
+        }
         if (queryString == null) {
             // use raw as we encode just below
             queryString = uri.getRawQuery();

http://git-wip-us.apache.org/repos/asf/camel/blob/2314e218/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyHttpProducerBridgeTest.java
----------------------------------------------------------------------
diff --git a/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyHttpProducerBridgeTest.java b/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyHttpProducerBridgeTest.java
index 8592817..a306cff 100644
--- a/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyHttpProducerBridgeTest.java
+++ b/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/NettyHttpProducerBridgeTest.java
@@ -16,13 +16,17 @@
  */
 package org.apache.camel.component.netty4.http;
 
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
 public class NettyHttpProducerBridgeTest extends BaseNettyTest {
 
     private int port1;
     private int port2;
+    private int port3;
 
     @Test
     public void testProxy() throws Exception {
@@ -30,6 +34,39 @@ public class NettyHttpProducerBridgeTest extends BaseNettyTest {
         assertEquals("Bye World", reply);
     }
 
+    @Test
+    public void testBridgeWithQuery() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:query");
+        mock.message(0).header(Exchange.HTTP_RAW_QUERY).isEqualTo("x=%3B");
+        mock.message(0).header(Exchange.HTTP_QUERY).isEqualTo("x=;");
+
+        template.request("netty4-http:http://localhost:" + port3 + "/query?bridgeEndpoint=true", new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(Exchange.HTTP_URI, "http://host:8080/");
+                exchange.getIn().setHeader(Exchange.HTTP_QUERY, "x=%3B");
+            }
+        });
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testBridgeWithRawQueryAndQuery() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:query");
+        mock.message(0).header(Exchange.HTTP_RAW_QUERY).isEqualTo("x=%3B");
+        mock.message(0).header(Exchange.HTTP_QUERY).isEqualTo("x=;");
+
+        template.request("netty4-http:http://localhost:" + port3 + "/query?bridgeEndpoint=true", new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(Exchange.HTTP_URI, "http://host:8080/");
+                exchange.getIn().setHeader(Exchange.HTTP_RAW_QUERY, "x=%3B");
+                exchange.getIn().setHeader(Exchange.HTTP_QUERY, "x=;");
+            }
+        });
+        assertMockEndpointsSatisfied();
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
@@ -37,12 +74,16 @@ public class NettyHttpProducerBridgeTest extends BaseNettyTest {
             public void configure() throws Exception {
                 port1 = getPort();
                 port2 = getNextPort();
+                port3 = getNextPort();
 
                 from("netty4-http:http://0.0.0.0:" + port1 + "/foo")
                         .to("netty4-http:http://0.0.0.0:" + port2 + "/bar?bridgeEndpoint=true&throwExceptionOnFailure=false");
 
                 from("netty4-http:http://0.0.0.0:" + port2 + "/bar")
                         .transform().simple("Bye ${body}");
+
+                from("netty4-http:http://0.0.0.0:" + port3 + "/query")
+                        .to("mock:query");
             }
         };
     }