Camel - 使用自定义jmsOperations:无法强制转换为org.apache.camel.component.jms.JmsConfiguration $ CamelJmsTemplate

时间:2012-11-26 21:40:47

标签: apache-camel spring-jms

我想使用自定义jmsOperations,当我尝试获得类强制转换异常时:无法强制转换为org.apache.camel.component.jms。 JmsConfiguration $ CamelJmsTemplate

配置:

<bean id="jmsErf" class="org.apache.camel.component.jms.JmsComponent">
    <property name="jmsOperations" ref="myJmsTemplate" />   
    <property name="preserveMessageQos" value="true"/>
    <property name="explicitQosEnabled" value="false"/>
    <property name="testConnectionOnStartup" value="true"/>
    <!--property name="useMessageIDAsCorrelationID" value="true" / WARNING! Do not use this as we need to copy only in the beginning not everywhere -->
    <property name="transactionManager" ref="jpaTransactionManager" />
    <property name="transacted" value="true" />
</bean>

<bean name="myJmsTemplate" class="blabla.MyJmsTemplate">
<property name="connectionFactory">
    <bean class="jms.MQConnectionFactory">
        <property name="queueManagerName" value="${Queue.My.manager}" />
        <property name="throwOnInvalidMessageProperty" value="false" />
    </bean>
</property>
</bean>

我创建的示例类

MyJmsTemplate extends org.springframework.jms.core.JmsTemplate implements
        org.springframework.jms.core.JmsOperations { .. no code :)

为什么我要尝试jmsOperations: 我只需要维护原始的JMSPriority。是的我确实尝试了preserveQoS explicitQoS [enablingetc的各种组合..它要么将所有优先级设置为4;或者优先级保持为零,尽管设置例如= 6优先级]。通过创建自己的jmsOperations并明确地传输JMSPriority值。

异常追踪:

  

引起:org.apache.camel.FailedToCreateProducerException:失败   为端点创建生产者:   端点[jmsErf://队列:MQDEV.MYQ.ERROR]。原因:   java.lang.ClassCastException:无法转换为blabla.MyJmsTemplate   org.apache.camel.component.jms.JmsConfiguration $ CamelJmsTemplate at   org.apache.camel.component.jms.JmsProducer.testConnectionOnStartup(JmsProducer.java:458)     在   org.apache.camel.component.jms.JmsProducer.doStart(JmsProducer.java:469)     在   org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60)     在   org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:62)     在   org.apache.camel.impl.ProducerCache.doGetProducer(ProducerCache.java:387)     ... 115更多引起:java.lang.ClassCastException:   bla.MyJmsTemplate无法转换为   org.apache.camel.component.jms.JmsConfiguration $ CamelJmsTemplate at   org.apache.camel.component.jms.JmsProducer.testConnectionOnStartup(JmsProducer.java:447)     ... 119更多

有人能指出我在骆驼中使用jmsOptions吗?

1 个答案:

答案 0 :(得分:0)

你使用的Camel版本是什么?

如果要自己映射到JMS消息或从JMS消息映射,则应使用自定义messageConverter。

如果设置preserveMessageQos = true,则应保留JMSPriority。