我正在将不同对象的列表传递给骆驼路线。我希望将消息的主体分割成一个对象,然后将主体的类放在标头中(使用处理器)。
from("direct:in")
.split(body())
.process(new JmsTypeHeaderProcessor(body().getClass().getName()))
.to("mock:out");
我正在这样尝试...
@Produce(uri = "direct:in") private ProducerTemplate template;
@EndpointInject(uri = "mock:out") private MockEndpoint endpoint;
@Test
public void testRoute() throws Exception {
List<Object> list = new ArrayList<>();
list.add("String");
list.add(Integer.valueOf(1));
list.add(Boolean.FALSE);
template.sendBody(list);
for (Exchange ex : endpoint.getExchanges()) {
System.out.println("JMSType=" + ex.getIn().getHeader("JMSType"));
}
}
运行时,我发现我实际上有标题
JMSType = org.apache.camel.builder.ValueBuilder
JMSType = org.apache.camel.builder.ValueBuilder
JMSType = org.apache.camel.builder.ValueBuilder
而我期望,并且想要
JMSType = java.lang.String
JMSType = java.lang.Integer
JMSType = java.lang.Boolean
要获得实际身体的等级需要什么?
顺便说一句。我可以看到
log("body.class")
返回了我想要的内容,但是我无法跟踪它的工作方式或使其适应我的需求。 最佳答案
骆驼路线是在路线构建器中设计的,代码只需运行一次即可设置路线。
所以这段代码
.process(new JmsTypeHeaderProcessor(body().getClass().getName()))
调用一次,body()。getClass()返回
ValueBuilder
,因为这是在设计时在DSL中用于指定body等的内容。如果要访问运行时消息正文,请从处理器的
Exchange
方法的process
获取。那是运行时消息,然后您可以获取主体。