我具有以下要求:
路线1:from(timer:foo?repeatcount=1).recepientList("rest service")
路线2:from(sourcequeue).process(new myprocessor()).to(destinationqueue)
需要使用来自route 1
的json响应并将其传递给Route 2
处理器。
我的问题是,每当我在exchange属性中设置json响应并尝试在Route 2处理器中使用它时,它都是null。
关于如何在这些路线之间传递交换属性的任何建议都会有很大帮助。
谢谢。
答案 0 :(得分:1)
如果使用http骆驼组件,则http响应应该在正文中。您可以从处理器加载它。
String json = exchange.getIn().getBody(String.class);
from(timer:foo?repeatcount=1).recepientList("http://rest_service")
.to(direct:sourcequeue)
您还可以使用标头来传递数据,从而将您的路线扔掉。
from(timer:foo?repeatcount=1).recepientList("http://rest_service")
.setHeader(“myJsonResponse”, simple("${body}"))
.to(direct:sourcequeue)
String json = exchange.getIn().getHeader(“myJsonResponse”, String.class);
答案 1 :(得分:0)
您无法使用 Exchange属性在路由之间传递信息的原因是,它们不是邮件的一部分。
看看this picture of the Camel Exchange model。
当骆驼收到邮件时,它将邮件嵌入到Exchange中,并且Exchange通过路由传递。但是,当您发送消息(.to(...)
)时,仅发送消息。
因此,您必须使用(由Thomas回答)消息正文或消息头。