Repository: camel Updated Branches: refs/heads/master 2b9caff09 -> 38bc5a91a
CAMEL-11312: camel-undertow - Rest-DSL should support OPTIONS Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/38bc5a91 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/38bc5a91 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/38bc5a91 Branch: refs/heads/master Commit: 38bc5a91ab9d88f3571531711bd104075c4c6dc6 Parents: 2b9caff Author: Claus Ibsen <davscl...@apache.org> Authored: Wed May 24 11:41:01 2017 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Wed May 24 11:41:01 2017 +0200 ---------------------------------------------------------------------- .../component/undertow/UndertowComponent.java | 18 +++++++++++++----- .../component/undertow/UndertowConsumer.java | 5 ++++- .../rest/RestUndertowHttpOptionsTest.java | 10 ++++------ 3 files changed, 21 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/38bc5a91/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java index bdb7616..ff522f7 100644 --- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java +++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java @@ -198,10 +198,23 @@ public class UndertowComponent extends DefaultComponent implements RestConsumerF } } + boolean explicitOptions = true; + // must use upper case for restrict + String restrict = verb.toUpperCase(Locale.US); + // allow OPTIONS in rest-dsl to allow clients to call the API and have responses with ALLOW headers + if (!restrict.contains("OPTIONS")) { + restrict += ",OPTIONS"; + // this is not an explicit OPTIONS path in the rest-dsl + explicitOptions = false; + } + boolean cors = config.isEnableCORS(); if (cors) { // allow HTTP Options as we want to handle CORS in rest-dsl map.put("optionsEnabled", "true"); + } else if (explicitOptions) { + // the rest-dsl is using OPTIONS + map.put("optionsEnabled", "true"); } String query = URISupport.createQueryString(map); @@ -213,11 +226,6 @@ public class UndertowComponent extends DefaultComponent implements RestConsumerF url = "undertow:%s://%s:%s/%s?matchOnUriPrefix=false&httpMethodRestrict=%s"; } - // must use upper case for restrict - String restrict = verb.toUpperCase(Locale.US); - if (cors) { - restrict += ",OPTIONS"; - } // get the endpoint url = String.format(url, scheme, host, port, path, restrict); http://git-wip-us.apache.org/repos/asf/camel/blob/38bc5a91/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java ---------------------------------------------------------------------- diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java index 1f89a54..f57286d 100644 --- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java +++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java @@ -91,7 +91,10 @@ public class UndertowConsumer extends DefaultConsumer implements HttpHandler { if (Methods.OPTIONS.equals(requestMethod) && !getEndpoint().isOptionsEnabled()) { String allowedMethods; if (getEndpoint().getHttpMethodRestrict() != null) { - allowedMethods = "OPTIONS," + getEndpoint().getHttpMethodRestrict(); + allowedMethods = getEndpoint().getHttpMethodRestrict(); + if (!allowedMethods.contains("OPTIONS")) { + allowedMethods = "OPTIONS," + allowedMethods; + } } else { allowedMethods = "GET,HEAD,POST,PUT,DELETE,TRACE,OPTIONS,CONNECT,PATCH"; } http://git-wip-us.apache.org/repos/asf/camel/blob/38bc5a91/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowHttpOptionsTest.java ---------------------------------------------------------------------- diff --git a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowHttpOptionsTest.java b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowHttpOptionsTest.java index d353be4..ebd7ce8 100644 --- a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowHttpOptionsTest.java +++ b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/rest/RestUndertowHttpOptionsTest.java @@ -20,10 +20,8 @@ import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.undertow.BaseUndertowTest; -import org.junit.Ignore; import org.junit.Test; -@Ignore("Not supported by camel-undertow yet") public class RestUndertowHttpOptionsTest extends BaseUndertowTest { @Test @@ -36,13 +34,13 @@ public class RestUndertowHttpOptionsTest extends BaseUndertowTest { }); assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE)); - assertEquals("OPTIONS,GET", exchange.getOut().getHeader("ALLOW")); + assertEquals("GET,OPTIONS", exchange.getOut().getHeader("ALLOW")); assertEquals("", exchange.getOut().getBody(String.class)); exchange = fluentTemplate.to("undertow:http://localhost:" + getPort() + "/users/v1/123").withHeader(Exchange.HTTP_METHOD, "OPTIONS").send(); - assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE)); - assertEquals("OPTIONS,PUT", exchange.getOut().getHeader("ALLOW")); - assertEquals("", exchange.getOut().getBody(String.class)); + assertEquals(200, exchange.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)); + assertEquals("PUT,OPTIONS", exchange.getIn().getHeader("ALLOW")); + assertEquals("", exchange.getIn().getBody(String.class)); } @Override