我正在使用Camel和Tomcat以及Spring。我使用的是Camel 2.15.0
并更新为2.17.1
。我没有对我的web.xml
进行任何其他更改,但现在我运行到端点(在Tomcat容器中运行)的测试得到404.Tomcat日志只显示"POST / HTTP/1.1" 404
。 Camel 2.17如何处理Servlet组件有什么不同吗?
我的web.xml:
<!-- Camel servlet -->
<servlet>
<servlet-name>http-ingest</servlet-name>
<servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Camel servlet mapping -->
<servlet-mapping>
<servlet-name>http-ingest</servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
我的RouteBuilder:
from("servlet://*?servletName=http=ingest")
...
更新
所以我做了一些回归测试,我编译了一个使用camel 2.15.0的旧版本项目,我的HTTPS测试工作正常。然后,我所做的唯一更改是将骆驼版本更新为2.17.1,重新编译,部署并重新进行测试。在2.17.1中,我得到了404.再次,除了改变我的pom中的骆驼版本之外,我没有做任何改变。
答案 0 :(得分:1)
好的,所以我花了一些时间在这上面,发现有一些与CamelHttpTransportServlet
分支和2.15.x
分支不同的2.17.x
提交。这些与第44行有关(见参考文献1)。不幸的是,我们似乎没有注入不同的策略。
默认策略似乎支持在新HttpRestServletResolveConsumerStrategy
中定义新的REST DSL样式。
当我阅读HttpRestServletResolveConsumerStrategy
实现时,我看到一些可能需要一些可能导致问题的进一步文档的事情。例如,新策略期望request.getPathInfo()
的返回值为非null(参见参考文献2的第36行)。此外,此策略依赖于RestConsumerContextPathMatcher
(参考3)来检查路径中的通配符。
此外,当我查看文档和源代码时,所有内容(包括文档和代码)似乎都假设servlet被部署为不是应用服务器中的根的war。我不认为这会是一个大问题,但我想知道如何设置server.xml配置以映射你的战争,以防你部署到root。
Definetely看起来像一个不起眼的问题。 :)
我希望这些有帮助!
参考文献: