CAMEL-7650: camel-restlet should return error code 405 (method not allowed) if the http request is using a verb that is not allowed.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/3a744d46 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/3a744d46 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/3a744d46 Branch: refs/heads/camel-2.12.x Commit: 3a744d460498475215ac178b8eef797283317887 Parents: 4c62b2e Author: Claus Ibsen <davscl...@apache.org> Authored: Mon Aug 4 10:18:22 2014 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Mon Aug 4 10:18:52 2014 +0200 ---------------------------------------------------------------------- .../apache/camel/component/restlet/MethodBasedRouter.java | 2 ++ .../restlet/RestletMultiMethodsEndpointTest.java | 10 ++++++++++ 2 files changed, 12 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/3a744d46/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/MethodBasedRouter.java ---------------------------------------------------------------------- diff --git a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/MethodBasedRouter.java b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/MethodBasedRouter.java index ea9bf16..b9518c3 100644 --- a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/MethodBasedRouter.java +++ b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/MethodBasedRouter.java @@ -55,6 +55,8 @@ class MethodBasedRouter extends Restlet { } else { LOG.debug("MethodRouter ({}) method not allowed: {}", uriPattern, method); response.setStatus(Status.CLIENT_ERROR_METHOD_NOT_ALLOWED); + // must include list of allowed methods + response.setAllowedMethods(routes.keySet()); } } http://git-wip-us.apache.org/repos/asf/camel/blob/3a744d46/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletMultiMethodsEndpointTest.java ---------------------------------------------------------------------- diff --git a/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletMultiMethodsEndpointTest.java b/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletMultiMethodsEndpointTest.java index 7ed9c07..1e4a61f 100644 --- a/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletMultiMethodsEndpointTest.java +++ b/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletMultiMethodsEndpointTest.java @@ -16,9 +16,12 @@ */ package org.apache.camel.component.restlet; +import java.util.Locale; + import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.builder.RouteBuilder; +import org.apache.http.Header; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpGet; @@ -61,6 +64,13 @@ public class RestletMultiMethodsEndpointTest extends RestletTestSupport { // delete is not allowed so we return 405 assertEquals(Status.CLIENT_ERROR_METHOD_NOT_ALLOWED.getCode(), response.getStatusLine().getStatusCode()); + + Header header = response.getFirstHeader("Allow"); + assertNotNull(header); + String value = header.getValue().toUpperCase(Locale.US); + assertTrue("POST should be allowed", value.contains("POST")); + assertTrue("GET should be allowed", value.contains("GET")); + assertTrue("PUT should be allowed", value.contains("PUT")); } protected RouteBuilder createRouteBuilder() {