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

时间:2016-06-13 10:08:39

标签: apache-camel jms activemq

我在交换对象的标题中设置了一个List与其他几个标头并将其路由到ActiveMQ

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

在我访问交换对象标题的下一个路线中,"testList"testObject不存在!但是剩余的标题存在(exchange.getIn().getHeader)。

我们不能发送除String之外的任何标题(列表或任何其他对象)吗?

1 个答案:

答案 0 :(得分:6)

根据Camel文件:

  

对于exchange.in.header,以下规则适用于标头   值:

     

值必须是基元或其计数器对象(例如Integer,Long,Character)。类型,字符串,CharSequence,日期,   BigDecimal和BigInteger都转换为它们的toString()   表示。所有其他类型都被删除。

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

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

Camel会删除不允许的标头类型,但您可以使用 vm seda 组件而不是 activemq 。或者,您可以将列表转换为XML或JSON,将其转换为字符串并发送此字符串 通过JMS。