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

Apache camel Camel-使用自定义jmsOperations:无法强制转换为org.apache.Camel.component.jms.JmsConfiguration$CamelJmsTemplate,apache-camel,spring-jms,Apache Camel,Spring Jms,我想使用一个定制的jms操作,当我尝试得到一个类强制转换异常:不能强制转换到org.apache.camel.component.jms。JmsConfiguration$CamelJmsTemplate 配置: <bean id="jmsErf" class="org.apache.camel.component.jms.JmsComponent"> <property name="jmsOperations" ref="myJmsTemplate" />

我想使用一个定制的jms操作,当我尝试得到一个类强制转换异常:不能强制转换到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>
为什么我要尝试JMS操作: 我只需要保持原有的精神状态。是的,我确实尝试过preserveQoS explicitQoS[各种启用的组合..它要么将所有优先级设置为4;要么尽管设置了eg=6优先级,优先级仍然为零]。通过创建自己的JMS操作并明确传递JMS优先权价值

异常跟踪:

原因:org.apache.camel.FailedToCreateProducerException:未能 为端点创建生产者: 端点[jmsErf://队列:MQDEV.MYQ.ERROR]。原因: java.lang.ClassCastException:blabla.MyJmsTemplate无法强制转换为 org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate位于 org.apache.camel.component.jms.JmsProducer.testconnectionnstartup(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位于 org.apache.camel.component.jms.JmsProducer.TestConnectionOnInstallup(JmsProducer.java:447) ... 119更多


有人能告诉我在camel中使用jmsOptions吗?

您使用的camel版本是什么

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


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

骆驼版本是2.10.0。当我使用Spring集成实现测试同一个流时,我可以看到MQ中的JMSPriority(它排除了MQ,或者任何底层api去掉了JMSPriority),您是否在使用IBM WebSphere MQ?因此,请确保将其设置为Java模式。有一些特殊的选项需要设置AFAIR。我认为我们可以排除特殊选项,因为Spring集成示例带有为同一组IBM MQ队列设置的JMSPriority值。
MyJmsTemplate extends org.springframework.jms.core.JmsTemplate implements
        org.springframework.jms.core.JmsOperations { .. no code :)