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

VG *_*gde 2 activemq-classic jms apache-camel

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

exchange.getOut().setHeader("testList", testList);
exchange.getOut().setHeader("testObject", testObject); 
exchange.getOut().setHeader("header1", "value1");  
exchange.getOut().setHeader("header2", "value2");
Run Code Online (Sandbox Code Playgroud)

在我访问交换对象的标题时的下一个路径中,"testList"并且testObject不存在!但剩下的标题存在(exchange.getIn().getHeader).

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

Ale*_*nin 6

根据Camel文件:

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

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

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

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

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