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/cd248428
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/cd248428
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/cd248428

Branch: refs/heads/camel-2.13.x
Commit: cd2484282f85ccc23bdef981c98e891fbabcc1f9
Parents: 8fe7d06
Author: Claus Ibsen <davscl...@apache.org>
Authored: Thu Jul 31 09:20:58 2014 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Thu Jul 31 09:21:30 2014 +0200

----------------------------------------------------------------------
 .../apache/camel/component/restlet/MethodBasedRouter.java |  4 ++--
 .../restlet/RestletMultiMethodsEndpointTest.java          | 10 ++++++++++
 .../camel/component/restlet/RestletRouteBuilderTest.java  | 10 ++++++++++
 3 files changed, 22 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/cd248428/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 2e5a139..ea9bf16 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
@@ -53,8 +53,8 @@ class MethodBasedRouter extends Restlet {
         if (target != null) {
             target.handle(request, response);
         } else {
-            LOG.debug("No route for request method: {}", method);
-            response.setStatus(Status.CLIENT_ERROR_NOT_FOUND);
+            LOG.debug("MethodRouter ({}) method not allowed: {}", uriPattern, 
method);
+            response.setStatus(Status.CLIENT_ERROR_METHOD_NOT_ALLOWED);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/cd248428/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 165cb27..7ed9c07 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
@@ -20,10 +20,12 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpDelete;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.client.methods.HttpPut;
 import org.junit.Test;
+import org.restlet.data.Status;
 
 /**
  * This unit test verifies a single route can service multiple methods.
@@ -53,6 +55,14 @@ public class RestletMultiMethodsEndpointTest extends 
RestletTestSupport {
         assertHttpResponse(response, 200, "text/plain", "GET");
     }
 
+    @Test
+    public void testDeleteMethod() throws Exception {
+        HttpResponse response = doExecute(new HttpDelete("http://localhost:"; + 
portNum + "/users/homer"));
+
+        // delete is not allowed so we return 405
+        assertEquals(Status.CLIENT_ERROR_METHOD_NOT_ALLOWED.getCode(), 
response.getStatusLine().getStatusCode());
+    }
+
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/cd248428/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletRouteBuilderTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletRouteBuilderTest.java
 
b/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletRouteBuilderTest.java
index 03a06c7..afb9ef5 100644
--- 
a/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletRouteBuilderTest.java
+++ 
b/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletRouteBuilderTest.java
@@ -131,6 +131,16 @@ public class RestletRouteBuilderTest extends 
RestletTestSupport {
         Response response = client.handle(new Request(Method.POST, 
             "http://localhost:"; + portNum + "/orders/99991/6"));
         // expect error status as no Restlet consumer to handle POST method
+        assertEquals(Status.CLIENT_ERROR_METHOD_NOT_ALLOWED, 
response.getStatus());
+        assertNotNull(response.getEntity().getText());
+    }
+
+    @Test
+    public void testNotFound() throws IOException {
+        Client client = new Client(Protocol.HTTP);
+        Response response = client.handle(new Request(Method.POST,
+            "http://localhost:"; + portNum + "/unknown"));
+        // expect error status as no Restlet consumer to handle POST method
         assertEquals(Status.CLIENT_ERROR_NOT_FOUND, response.getStatus());
         assertNotNull(response.getEntity().getText());
     }

Reply via email to