我是新手并使用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 @
所以,如果有人能弄清楚我做错了什么。
答案 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不同的名称:(