Apache Camel - 在路由到 ActiveMQ 期间,除 String 外,所有 headers 都丢失了

Apache Camel - all headers are lost except String during routing to ActiveMQ

我正在设置一个列表以交换 object 的 header 与其他一对 header 并将其路由到 ActiveMQ

exchange.getOut().setHeader("testList", testList);
exchange.getOut().setHeader("testObject", testObject); 
exchange.getOut().setHeader("header1", "value1");  
exchange.getOut().setHeader("header2", "value2");

在我访问交易所object的下一条路线中,header、"testList"testObject不存在!但剩余 header 存在 (exchange.getIn().getHeader)。

我们不能发送除字符串之外的任何 header(列表或任何其他 object)吗?

根据 Camel 文档:

For the exchange.in.header, the following rules apply for the header values:

The values must be primitives or their counter objects (such as Integer, Long, Character). The types, String, CharSequence, Date, BigDecimal and BigInteger are all converted to their toString() representation. All other types are dropped.

可在此处找到更多信息:http://camel.apache.org/jms 或者这里 http://docs.oracle.com/javaee/1.4/api/javax/jms/Message.html

参见 Camel 手册部分:发送时的消息格式

Camel 将删除 headers 不允许的类型,但您可以使用 vmseda 组件代替 activemq。或者您可以将您的列表转换为 XML 或 JSON,将其转换为字符串并发送此字符串 通过 JMS。