我正在使用camel发送消息给一个IBM。侦听此队列的MDB需要com.ibm.jms.JMSMapMessage类型的消息。
当我使用camel producerTemplate时,会抛出异常。我正在执行这个producerTemplate.sendBody("wmq:queue",hashMap);
Exception data: java.lang.ClassCastException: com.ibm.jms.JMSMapMessage incompatible with javax.jms.ObjectMessage所以我尝试了,它成功了。
jmsTemplate.send(new MessageCreator() {
@Override
public Message createMessage(Session session)
throws JMSException {
return session.createObjectMessage((Serializable) sctHmap);
}
});问: jms组件文档显示
它将Spring的JMS支持用于声明性事务,包括用于发送的Spring的JmsTemplate和用于消费的MessageListenerContainer。
我尝试了禁用骆驼自动转换使用mapJmsMessage=false。我意识到它不会有帮助,因为它会发送一个散列表,我仍然得到了同样的例外。有什么方法可以让producerTemplate和JMSTemplate一样工作吗?ProducerTemplate似乎更优雅,至少在我的单元测试方面是如此。
发布于 2018-02-14 06:38:00
我似乎误解了类转换异常消息。Camel的发送是正确的,com.ibm.jms.JMSMapMessage,消费者应用程序中的MDB正在等待javax.jms.ObjectMessage。我通过在端点URI中设置jmsMessageType=object来解决这个问题。:)
https://stackoverflow.com/questions/48766509
复制相似问题