Apache camel JMSTimestamp与JMS消息上其他日期存储头的比较

Apache camel JMSTimestamp与JMS消息上其他日期存储头的比较,apache-camel,jms,activemq,Apache Camel,Jms,Activemq,我正在使用AMQs REST API将消息发送到queryString中设置了头的队列 我正在使用UNIX时间戳的毫秒值设置日期头myDateHeader &myDateHeader=1583781133771 jmstiestamp标题正在为我自动设置,并且似乎也被设置为长 然后,我使用camel(尽管是在Talend中)使用此消息,并可以将jmstiestamp解析为格式化日期 但是,当我尝试对myDateHeader执行相同操作时,我得到了null返回 如果我“解析”到String和Lon

我正在使用AMQs REST API将消息发送到queryString中设置了头的队列

我正在使用UNIX时间戳的毫秒值设置日期头
myDateHeader

&myDateHeader=1583781133771

jmstiestamp
标题正在为我自动设置,并且似乎也被设置为长

然后,我使用camel(尽管是在Talend中)使用此消息,并可以将
jmstiestamp
解析为格式化日期

但是,当我尝试对
myDateHeader
执行相同操作时,我得到了
null
返回

如果我“解析”到
String
Long
,则
jmstiestamp
myDateHeader
都会显示值,因此在日期解析过程中(不会)发生某些事情

Talend代码显示

row5.Event_Timestamp = org.apache.camel.builder.SimpleBuilder
                            .simple("${in.header.myDateHeader}")
                            .evaluate(routerExchange, java.util.Date.class);
按照
SimpleBuilder
类显示正确的
resultType
。代码与解析
jmstiestamp
时生成的代码相同

当我尝试的时候

simple(${date:in.header.myDateHeader:yyyyymmdd}”)

我明白了

java.lang.IllegalArgumentException: Cannot find java.util.Date object at command: in.header.myDateHeader
我猜:

1) 创建消息时,需要使用正确类型的
Date
设置消息头,才能将此日期解析作为消费的一部分

2) RESTAPI将所有头文件的类型设置为
String
,而我不能通过REST调用来更改它

请原谅我的猜测,但我希望有人能证实上述内容,因此,在使用这些消息时,我不能将
myDateHeader
jmstiestamp
头处理得一样


谢谢你的第二个假设是正确的。自定义标题使用类型
字符串
进行解析。在Talend中,以及作为Talend ESB底层集成框架的Apache Camel中,预定义的JMS头(包括
jmstiestamp
)根据转换为Java类型。

无论如何,我认为没有任何方法可以通过REST管理API设置头的类型。