繁体   English   中英

获取消息正文的实际类

[英]Getting the actual class of a message body

我正在将不同对象的列表传递给骆驼路线。 我希望将消息的主体分割成一个对象,然后将主体的类放在标头中(使用处理器)。

    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方法获得该消息正文。 那是运行时消息,然后您可以获取主体。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM