spring-boot - CamelContext 必须指定在:HttpMessage@0x36ed8347
问题描述
我在 spring boot 应用程序中使用 camelServlet,camel kafka,我收到了这个我无法理解的错误
当我尝试调用配置为 REST DSL 路由的 get 端点时,出现以下错误
路线:
rest().get("/getBatchID")
.to("direct:getBatchID");
我已将骆驼 servlet bean 定义如下:
@Bean
public ServletRegistrationBean camelServletRegistrationBean() {
ServletRegistrationBean registration = new ServletRegistrationBean(new CamelHttpTransportServlet(), "/camel/*");
registration.setName("CamelServlet");
return registration;
堆栈跟踪:
2018-11-25 23:22:10,066|INFO |http-nio-9000-exec-2|o.a.c.c.s.CamelHttpTransportServlet - Initialized CamelHttpTransportServlet[name=CamelServlet, contextPath=]
2018-11-25 23:22:10,183|ERROR|http-nio-9000-exec-2|o.a.c.c.C.[.[.[.[CamelServlet] - Servlet.service() for servlet [CamelServlet] in context with path [] threw exception
java.lang.IllegalArgumentException: CamelContext must be specified on: HttpMessage@0x36ed8347
at org.apache.camel.util.ObjectHelper.notNull(ObjectHelper.java:342)
at org.apache.camel.impl.DefaultMessage.createHeaders(DefaultMessage.java:254)
at org.apache.camel.impl.DefaultMessage.setHeader(DefaultMessage.java:171)
at org.apache.camel.http.common.HttpMessage.<init>(HttpMessage.java:41)
at org.apache.camel.http.common.CamelServlet.doService(CamelServlet.java:169)
at org.apache.camel.http.common.CamelServlet.service(CamelServlet.java:74)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:90)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
发出获取请求时是否需要在标头中添加 camelContext ?
解决方案
这是因为 HTTPMessage 扩展了 DefaultMessage ,它存在于同一个包中,存在超过 1 个 jar 依赖项。
类org.apache.camel.impl.DefaultMessage
存在于 2 个罐子中。
- 活动 MQ 全部
- 骆驼核心 JAR。
解决方案是您使用 activemq-client jar 或调整您的 .MF 文件
推荐阅读
- selenium - selenium 库在被诗歌添加时无法被 docker 识别
- python - 通过指向两个返回值使函数易于理解
- javascript - 如何防止 Vuejs 中的 dragstart 出现短暂闪烁
- jestjs - NestJS 生命周期事件在 e2e 测试中未按预期执行
- elasticsearch - SpringData(4.x)弹性没有正确序列化实体
- r - 明确 ggplot_build
- unicode - 用 unicode 字符绘制一个水平的 1 行框
- javascript - 如何在此代码段中尝试在控制台中记录日期?
- javascript - 匿名函数未执行
- string - 这个 MIPS 汇编代码可以简化吗?