Camel ProducerTemplate与Spring JMSTemplate

时间:2018-02-13 12:08:08

标签: apache-camel ibm-mq spring-jms

我使用camel将消息发送到IBM MQQueue。 侦听此队列的MDB需要com.ibm.jms.JMSMapMessage类型的消息。

当我使用camel producerTemplate时,会抛出异常。 我这样做 producerTemplate.sendBody(" WMQ:队列",HashMap中);

Exception data: java.lang.ClassCastException: com.ibm.jms.JMSMapMessage incompatible with javax.jms.ObjectMessage

所以我尝试了Spring jmsTemplate,它起作用了。

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禁用camels自动转换。 我意识到它没有帮助,因为它会发送一个哈希映射,我仍然有相同的例外。有没有什么方法可以让producerTemplate以与JMSTemplate相同的方式工作? ProducerTemplate似乎更优雅,至少就我的单元测试而言

1 个答案:

答案 0 :(得分:1)

似乎我误解了classcast异常消息。 Camel正在发送com.ibm.jms.JMSMapMessage,消费者应用程序的MDB期待javax.jms.ObjectMessage。 我通过在端点URI中设置jmsMessageType=object来解决它。 :)