CAMEL-9281: Http/http4 producer should keep trailing slash if provided in url. Thanks to Edward Welch for the patch.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/705fba25 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/705fba25 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/705fba25 Branch: refs/heads/camel-2.16.x Commit: 705fba25fa9d351f3462761caf44c283dda96ac6 Parents: f467ebf Author: Claus Ibsen <davscl...@apache.org> Authored: Sat Jan 9 15:34:07 2016 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Sat Jan 9 15:37:49 2016 +0100 ---------------------------------------------------------------------- .../apache/camel/http/common/HttpHelper.java | 4 ++-- .../component/http/helper/HttpHelperTest.java | 22 ++++++++++++++++++++ .../component/http4/helper/HttpHelperTest.java | 22 ++++++++++++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/705fba25/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 e18198a..4a3c952 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 @@ -273,7 +273,7 @@ public final class HttpHelper { String path = exchange.getIn().getHeader(Exchange.HTTP_PATH, String.class); // NOW the HTTP_PATH is just related path, we don't need to trim it if (path != null) { - if (path.startsWith("/")) { + if (path.length() > 1 && path.startsWith("/")) { path = path.substring(1); } if (path.length() > 0) { @@ -283,7 +283,7 @@ public final class HttpHelper { // if there are no query params if (idx == -1) { // make sure that there is exactly one "/" between HTTP_URI and HTTP_PATH - uri = uri.endsWith("/") ? uri : uri + "/"; + uri = uri.endsWith("/") || path.startsWith("/") ? uri : uri + "/"; uri = uri.concat(path); } else { // there are query params, so inject the relative path in the right place http://git-wip-us.apache.org/repos/asf/camel/blob/705fba25/components/camel-http/src/test/java/org/apache/camel/component/http/helper/HttpHelperTest.java ---------------------------------------------------------------------- diff --git a/components/camel-http/src/test/java/org/apache/camel/component/http/helper/HttpHelperTest.java b/components/camel-http/src/test/java/org/apache/camel/component/http/helper/HttpHelperTest.java index d8c5a75..37c39b2 100644 --- a/components/camel-http/src/test/java/org/apache/camel/component/http/helper/HttpHelperTest.java +++ b/components/camel-http/src/test/java/org/apache/camel/component/http/helper/HttpHelperTest.java @@ -139,6 +139,28 @@ public class HttpHelperTest { assertEquals("http://apache.org/?q=%E2%82%AC", uri.toString()); } + @Test + public void createURLShouldNotRemoveTrailingSlash() throws Exception { + String url = HttpHelper.createURL( + createExchangeWithOptionalCamelHttpUriHeader(null, "/"), + createHttpEndpoint(true, "http://www.google.com")); + assertEquals("http://www.google.com/", url); + } + @Test + public void createURLShouldAddPathAndQueryParamsAndSlash() throws Exception { + String url = HttpHelper.createURL( + createExchangeWithOptionalCamelHttpUriHeader(null, "search"), + createHttpEndpoint(true, "http://www.google.com/context?test=true")); + assertEquals("http://www.google.com/context/search?test=true", url); + } + @Test + public void createURLShouldAddPathAndQueryParamsAndRemoveDuplicateSlash() throws Exception { + String url = HttpHelper.createURL( + createExchangeWithOptionalCamelHttpUriHeader(null, "/search"), + createHttpEndpoint(true, "http://www.google.com/context/?test=true")); + assertEquals("http://www.google.com/context/search?test=true", url); + } + private Exchange createExchangeWithOptionalHttpQueryAndHttpMethodHeader(String httpQuery, HttpMethods httpMethod) { CamelContext context = new DefaultCamelContext(); Exchange exchange = new DefaultExchange(context); http://git-wip-us.apache.org/repos/asf/camel/blob/705fba25/components/camel-http4/src/test/java/org/apache/camel/component/http4/helper/HttpHelperTest.java ---------------------------------------------------------------------- diff --git a/components/camel-http4/src/test/java/org/apache/camel/component/http4/helper/HttpHelperTest.java b/components/camel-http4/src/test/java/org/apache/camel/component/http4/helper/HttpHelperTest.java index d74e43f..c067c5b 100644 --- a/components/camel-http4/src/test/java/org/apache/camel/component/http4/helper/HttpHelperTest.java +++ b/components/camel-http4/src/test/java/org/apache/camel/component/http4/helper/HttpHelperTest.java @@ -162,6 +162,28 @@ public class HttpHelperTest { assertEquals(HttpMethods.POST, method); } + @Test + public void createURLShouldNotRemoveTrailingSlash() throws Exception { + String url = HttpHelper.createURL( + createExchangeWithOptionalCamelHttpUriHeader(null, "/"), + createHttpEndpoint(true, "http://www.google.com")); + assertEquals("http://www.google.com/", url); + } + @Test + public void createURLShouldAddPathAndQueryParamsAndSlash() throws Exception { + String url = HttpHelper.createURL( + createExchangeWithOptionalCamelHttpUriHeader(null, "search"), + createHttpEndpoint(true, "http://www.google.com/context?test=true")); + assertEquals("http://www.google.com/context/search?test=true", url); + } + @Test + public void createURLShouldAddPathAndQueryParamsAndRemoveDuplicateSlash() throws Exception { + String url = HttpHelper.createURL( + createExchangeWithOptionalCamelHttpUriHeader(null, "/search"), + createHttpEndpoint(true, "http://www.google.com/context/?test=true")); + assertEquals("http://www.google.com/context/search?test=true", url); + } + private Exchange createExchangeWithOptionalHttpQueryAndHttpMethodHeader(String httpQuery, HttpMethods httpMethod) { CamelContext context = new DefaultCamelContext(); Exchange exchange = new DefaultExchange(context);