Repository: camel
Updated Branches:
  refs/heads/master 7113dee32 -> 965d2377a


Rest DSL. camel-swagger work in progress.


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

Branch: refs/heads/master
Commit: 965d2377ab5c3ddca3bc39bcc42330d18cc05dfa
Parents: 7113dee
Author: Claus Ibsen <davscl...@apache.org>
Authored: Sun Aug 10 16:38:50 2014 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Sun Aug 10 16:38:50 2014 +0200

----------------------------------------------------------------------
 .../camel/component/http/CamelServlet.java      | 16 ++++++++++++++-
 ...JettyRestServletResolveConsumerStrategy.java |  7 ++++++-
 .../netty/http/RestContextPathMatcher.java      |  2 ++
 .../http/handlers/HttpServerChannelHandler.java | 21 ++++++++++++++++++++
 ...rvletRestServletResolveConsumerStrategy.java |  7 ++++++-
 .../camel/example/rest/UserRouteBuilder.java    |  2 +-
 .../apache/camel/example/rest/UserService.java  |  5 ++---
 .../src/main/resources/camel-config-xml.xml     |  2 +-
 8 files changed, 54 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/965d2377/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java
----------------------------------------------------------------------
diff --git 
a/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java
 
b/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java
index 926d25d..f70b57b 100644
--- 
a/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java
+++ 
b/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java
@@ -74,9 +74,23 @@ public class CamelServlet extends HttpServlet {
             response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
             return;
         }
+
+        // if its an OPTIONS request then return which method is allowed
+        if ("OPTIONS".equals(request.getMethod())) {
+            String s;
+            if (consumer.getEndpoint().getHttpMethodRestrict() != null) {
+                s = "OPTIONS," + 
consumer.getEndpoint().getHttpMethodRestrict();
+            } else {
+                // allow them all
+                s = "GET,HEAD,POST,PUT,DELETE,TRACE,OPTIONS,CONNECT,PATCH";
+            }
+            response.addHeader("Allow", s);
+            response.setStatus(HttpServletResponse.SC_OK);
+            return;
+        }
         
         if (consumer.getEndpoint().getHttpMethodRestrict() != null 
-            && 
!consumer.getEndpoint().getHttpMethodRestrict().equals(request.getMethod())) {
+            && 
!consumer.getEndpoint().getHttpMethodRestrict().contains(request.getMethod())) {
             response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
             return;
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/965d2377/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyRestServletResolveConsumerStrategy.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyRestServletResolveConsumerStrategy.java
 
b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyRestServletResolveConsumerStrategy.java
index 1a7e05a..a8c3a4f 100644
--- 
a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyRestServletResolveConsumerStrategy.java
+++ 
b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyRestServletResolveConsumerStrategy.java
@@ -152,7 +152,12 @@ public class JettyRestServletResolveConsumerStrategy 
extends HttpServletResolveC
             return true;
         }
 
-        return 
method.toLowerCase(Locale.US).endsWith(restrict.toLowerCase(Locale.US));
+        // always match OPTIONS as some REST clients uses that prior to 
calling the service
+        if ("OPTIONS".equals(method)) {
+            return true;
+        }
+
+        return 
restrict.toLowerCase(Locale.US).contains(method.toLowerCase(Locale.US));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/965d2377/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/RestContextPathMatcher.java
----------------------------------------------------------------------
diff --git 
a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/RestContextPathMatcher.java
 
b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/RestContextPathMatcher.java
index c48e815..f7e73db 100644
--- 
a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/RestContextPathMatcher.java
+++ 
b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/RestContextPathMatcher.java
@@ -23,6 +23,8 @@ public class RestContextPathMatcher extends 
DefaultContextPathMatcher {
 
     private final String rawPath;
 
+    // TODO: improve matching like we have done in camel-servlet
+
     public RestContextPathMatcher(String rawPath, String path, boolean 
matchOnUriPrefix) {
         super(path, matchOnUriPrefix);
         this.rawPath = rawPath;

http://git-wip-us.apache.org/repos/asf/camel/blob/965d2377/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
----------------------------------------------------------------------
diff --git 
a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
 
b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
index f30c304..3bf21ba 100644
--- 
a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
+++ 
b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
@@ -53,6 +53,7 @@ import org.slf4j.LoggerFactory;
 import static org.jboss.netty.handler.codec.http.HttpHeaders.isKeepAlive;
 import static 
org.jboss.netty.handler.codec.http.HttpResponseStatus.BAD_REQUEST;
 import static 
org.jboss.netty.handler.codec.http.HttpResponseStatus.METHOD_NOT_ALLOWED;
+import static org.jboss.netty.handler.codec.http.HttpResponseStatus.OK;
 import static 
org.jboss.netty.handler.codec.http.HttpResponseStatus.SERVICE_UNAVAILABLE;
 import static 
org.jboss.netty.handler.codec.http.HttpResponseStatus.UNAUTHORIZED;
 import static org.jboss.netty.handler.codec.http.HttpVersion.HTTP_1_1;
@@ -91,6 +92,26 @@ public class HttpServerChannelHandler extends 
ServerChannelHandler {
             messageEvent.getChannel().write(response);
             return;
         }
+
+        // if its an OPTIONS request then return which methods is allowed
+        if ("OPTIONS".equals(request.getMethod().getName())) {
+            String s;
+            if (consumer.getEndpoint().getHttpMethodRestrict() != null) {
+                s = "OPTIONS," + 
consumer.getEndpoint().getHttpMethodRestrict();
+            } else {
+                // allow them all
+                s = "GET,HEAD,POST,PUT,DELETE,TRACE,OPTIONS,CONNECT,PATCH";
+            }
+            HttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK);
+            response.setChunked(false);
+            response.headers().set("Allow", s);
+            response.headers().set(Exchange.CONTENT_TYPE, "text/plain");
+            response.headers().set(Exchange.CONTENT_LENGTH, 0);
+            messageEvent.getChannel().write(response);
+            return;
+        }
+
+
         if (consumer.getEndpoint().getHttpMethodRestrict() != null
                 && 
!consumer.getEndpoint().getHttpMethodRestrict().contains(request.getMethod().getName()))
 {
             HttpResponse response = new DefaultHttpResponse(HTTP_1_1, 
METHOD_NOT_ALLOWED);

http://git-wip-us.apache.org/repos/asf/camel/blob/965d2377/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletRestServletResolveConsumerStrategy.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletRestServletResolveConsumerStrategy.java
 
b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletRestServletResolveConsumerStrategy.java
index ac24ef0..c315fa5 100644
--- 
a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletRestServletResolveConsumerStrategy.java
+++ 
b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletRestServletResolveConsumerStrategy.java
@@ -155,7 +155,12 @@ public class ServletRestServletResolveConsumerStrategy 
extends HttpServletResolv
             return true;
         }
 
-        return 
method.toLowerCase(Locale.US).endsWith(restrict.toLowerCase(Locale.US));
+        // always match OPTIONS as some REST clients uses that prior to 
calling the service
+        if ("OPTIONS".equals(method)) {
+            return true;
+        }
+
+        return 
restrict.toLowerCase(Locale.US).contains(method.toLowerCase(Locale.US));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/965d2377/examples/camel-example-servlet-rest-tomcat/src/main/java/org/apache/camel/example/rest/UserRouteBuilder.java
----------------------------------------------------------------------
diff --git 
a/examples/camel-example-servlet-rest-tomcat/src/main/java/org/apache/camel/example/rest/UserRouteBuilder.java
 
b/examples/camel-example-servlet-rest-tomcat/src/main/java/org/apache/camel/example/rest/UserRouteBuilder.java
index 807f4b4..1aabafc 100644
--- 
a/examples/camel-example-servlet-rest-tomcat/src/main/java/org/apache/camel/example/rest/UserRouteBuilder.java
+++ 
b/examples/camel-example-servlet-rest-tomcat/src/main/java/org/apache/camel/example/rest/UserRouteBuilder.java
@@ -52,7 +52,7 @@ public class UserRouteBuilder extends RouteBuilder {
             .get("/{id}").outType(User.class)
                 .to("bean:userService?method=getUser(${header.id})")
 
-            .put().type(User.class).outType(User.class)
+            .put().type(User.class)
                 .to("bean:userService?method=updateUser")
 
             .get("/findAll").outTypeList(User.class)

http://git-wip-us.apache.org/repos/asf/camel/blob/965d2377/examples/camel-example-servlet-rest-tomcat/src/main/java/org/apache/camel/example/rest/UserService.java
----------------------------------------------------------------------
diff --git 
a/examples/camel-example-servlet-rest-tomcat/src/main/java/org/apache/camel/example/rest/UserService.java
 
b/examples/camel-example-servlet-rest-tomcat/src/main/java/org/apache/camel/example/rest/UserService.java
index e59ce5f..26abd73 100644
--- 
a/examples/camel-example-servlet-rest-tomcat/src/main/java/org/apache/camel/example/rest/UserService.java
+++ 
b/examples/camel-example-servlet-rest-tomcat/src/main/java/org/apache/camel/example/rest/UserService.java
@@ -56,9 +56,8 @@ public class UserService {
      * Updates or creates the given user
      *
      * @param user the user
-     * @return the old user before it was updated, or <tt>null</tt> if 
creating a new user
      */
-    public User updateUser(User user) {
-        return users.put("" + user.getId(), user);
+    public void updateUser(User user) {
+        users.put("" + user.getId(), user);
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/965d2377/examples/camel-example-servlet-rest-tomcat/src/main/resources/camel-config-xml.xml
----------------------------------------------------------------------
diff --git 
a/examples/camel-example-servlet-rest-tomcat/src/main/resources/camel-config-xml.xml
 
b/examples/camel-example-servlet-rest-tomcat/src/main/resources/camel-config-xml.xml
index b6185c6..82192e6 100755
--- 
a/examples/camel-example-servlet-rest-tomcat/src/main/resources/camel-config-xml.xml
+++ 
b/examples/camel-example-servlet-rest-tomcat/src/main/resources/camel-config-xml.xml
@@ -48,7 +48,7 @@
       </get>
 
       <!-- this is a rest PUT to create/update an user -->
-      <put type="org.apache.camel.example.rest.User" 
outType="org.apache.camel.example.rest.User">
+      <put type="org.apache.camel.example.rest.User">
         <to uri="bean:userService?method=updateUser"/>
       </put>
 

Reply via email to