java - 获取消息体的实际类

标签 java apache-camel

我正在将不同对象的列表传递给 Camel 路线。我希望路由将每条消息的正文拆分为一个对象,并将正文的类放入 header 中(使用处理器)。

    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") 返回我想要的内容,但我无法理解它的工作原理或根据我的需要调整它。

最佳答案

Camel 路线是在路线构建器中设计的,代码运行一次即可设置路线。

所以这段代码

.process(new JmsTypeHeaderProcessor(body().getClass().getName()))

被调用一次,body().getClass() 返回 ValueBuilder,因为这是在 DSL 设计时用来指定正文等的内容。

如果您想访问运行时消息正文,请从处理器的 process 方法中的 Exchange 获取该正文。这是运行时消息,然后您可以获取正文。

关于java - 获取消息体的实际类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32762575/

相关文章:

java - 多类图形用户界面

java - 如何获取 HashMap 中包含的所有键的特定属性值?

java - ActiveMQ 属性 SERIALIZABLE_PACKAGES 发送 ObjectMessage

java - Apache Camel 增量和定期从 ftp 中提取数据

java - 将 Zip 内容读入字符串时出现 "ZipException - unexpected end of file when reading short buff"

java - 在android中选择并标记部分文本

java - 从cobertura的代码覆盖中排除特定方法?

java - Apache Camel 环境属性文件

java - 在Java中的 `break`循环中使用 `while`语句有什么问题?

java - Camel : Add TypeConverter in Test Case