使用相同的URL但在Apache Camel中使用不同的http方法进行REST请求时没有响应

时间:2014-12-10 08:38:33

标签: java apache rest apache-camel

我是新手并使用Apache Camel和RESTful服务。当我使用相同的URL但不同的http方法发出请求时,我正在

  

CamelHttpTransportServlet - 没有服务请求的消费者org.apache.catalina.connector.RequestFacade

这是我对web.xml的一些内容

 <servlet>
   <display-name>Camel Http Transport Servlet</display-name>
   <servlet-name>CamelServlet</servlet-name>
   <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
    <servlet-name>CamelServlet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>

这是我的RouteBuilder的代码

  rest("/user").description("User rest service")
   .consumes("application/json").produces("application/json")
       .get("/{userId}").description("Get user with specified userId")
       .to("bean:userService?method=getUser(${header.userId})")

     .delete("/{userId}").description("Delete user with specified userId")
     .to("bean:userService?method=deleteUser(${header.userId})");

现在我按以下顺序发出请求:

1)GET http://localhost:8090/foo/rest/user/3 
2)DELETE http://localhost:8090/foo/rest/user/3

在第一次请求期间,我获得了预期的JSON数据

 {
  "userName" : "test",
  "userId" : 3,
 }

现在我在之后拨打第二个请求DELETE http://localhost:8090/foo/rest/user/3 第一个,它给了我以下:

  

CamelHttpTransportServlet - 没有服务请求的消费者org.apache.catalina.connector.RequestFacade @

所以,如果有人能弄清楚我做错了什么。

4 个答案:

答案 0 :(得分:1)

我相信错误发生在Servlet中。

请检查是否有方法 deleteUser

答案 1 :(得分:0)

我认为您的路线构建器中的.endRest()步骤之后缺少.to()路线步骤。

答案 2 :(得分:0)

从文档中: &#34; REST DSL将在使用基本路径和uri模板时处理重复的路径分隔符。 在上面的示例中,其余基本路径以斜杠(/)结尾,动词以斜杠(/)开头。 但Apache Camel会处理这个并删除重复的斜杠。&#34;

如果你为同一个uri写了不同的名字,

就可以了:

rest("/user/{userId}")
.get().....
.delete("/").....
.post("//").....

答案 3 :(得分:0)

同样的事情发生在我身上

[TRACE] org.apache.camel.http.common.CamelServlet.service - Service: org.apache.catalina.connector.RequestFacade@6388c915
[DEBUG] org.apache.camel.http.common.CamelServlet.service - No consumer to service request org.apache.catalina.connector.RequestFacade@6388c915

我在web.xml中的servlet配置如下:

<servlet>
  <display-name>Camel Http Transport Servlet</display-name>
  <servlet-name>CamelServletMyApp</servlet-name>
  <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>
  <init-param>
    <param-name>ignoreDuplicateServletName</param-name>
    <param-value>true</param-value>
  </init-param>    
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>CamelServletMyApp</servlet-name>
  <url-pattern>/services/*</url-pattern>
</servlet-mapping>

出现问题的原因是 servlet-name CamelServlet 不同,如gotcha-when-using-camel

中的解释

servlet-name 返回 CamelServlet 以便工作。

<servlet-name>CamelServlet</servlet-name>

我没有使用与CamelServlet不同的名称:(