问题描述
我对使用JNDI和Spring的Camel Context具有良好的XML配置.
I have a good working XML configuration for Camel Context that uses JNDI with Spring
后来的Solace.JndiObjectFactoryBean被用作connectionFactory
Later Solace.JndiObjectFactoryBean gets used as connectionFactory
<bean id="Solace.JmsComponent" class=" on">
<property name="connectionFactory" ref="Solace.JndiObjectFactoryBean" />
<property name="destinationResolver" ref="Solace.JndiDestinationResolver" />
</bean>
我正在尝试将其转换为从org.apache.camel.spring.javaconfig.CamelConfiguration
扩展的Java类.但是有一个问题.当我尝试在JMS组件上设置连接工厂时 component.setConnectionFactory(getJndiObjectFactoryBean()); getJndiObjectFactoryBean(),我收到一个编译时异常:
I am trying to convert this into a Java class that extends from org.apache.camel.spring.javaconfig.CamelConfiguration
. But there is one problem. When I try to set a connection factory on JMS component component.setConnectionFactory(getJndiObjectFactoryBean()); getJndiObjectFactoryBean(), I get a compile time exception :
The method setConnectionFactory(ConnectionFactory) in the type JmsComponent
is not applicable for the arguments (JndiObjectFactoryBean)
但是当我尝试将从getJndiObjectFactoryBean返回的JndiObjectFactoryBean显式转换为SolConnectionFactory时,会出现运行时错误
But when I try to cast JndiObjectFactoryBean returned from getJndiObjectFactoryBean explicitly to SolConnectionFactory, I get a runtime error
016-02-05 17:39:09,234|[localhost-startStop-1]|[]|[]|[ERROR] web.context.ContextLoader [line:307] Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'getJMSConfiguration' defined in class path resource [com//camel
/CamelRoutesConfig.class]: Instantiation of bean failed; nested exception is org
.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.apache.camel.component.jms.JmsConfiguration com.camel.CamelRoutesConfig.getJMSConfiguration()] threw exception; nested exception is java.lang.ClassCastException: org.springframework.jndi.JndiObjectFactoryBean$$EnhancerByCG
LIB$$18b94f95 cannot be cast to com.solacesystems.jms.SolConnectionFactory
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsi
ngFactoryMethod(ConstructorResolver.java:581)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1029)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
.createBeanInstance(AbstractAutowireCapableBeanFactory.java:925)
我相信在类路径中确实有必要的jar. sol-common-x.y.z.jar,sol-jcsmp-x.y.z.jar,sol-jms-x.y.z.jar
I believe do have have requisite jars in the class path. sol-common-x.y.z.jar, sol-jcsmp-x.y.z.jar, sol-jms-x.y.z.jar
推荐答案
不能将JndiObjectFactoryBean
强制转换为ConnectionFactory
.
有两种选择:
- 在
getJndiObjectFactoryBean()
方法返回的JndiObjectFactoryBean
中使用JndiObjectFactoryBean.getObject()
. -
让Spring提供
ConnectionFactory
.
- Use
JndiObjectFactoryBean.getObject()
in theJndiObjectFactoryBean
that's returned by yourgetJndiObjectFactoryBean()
method. Get Spring to provide the
ConnectionFactory
.
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("config.xml");ConnectionFactory connectionFactory = (ConnectionFactory) context.getBean("Solace.JndiObjectFactoryBean");
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("config.xml");ConnectionFactory connectionFactory = (ConnectionFactory) context.getBean("Solace.JndiObjectFactoryBean");
这篇关于将Spring的JndiObjectFactoryBean强制转换为Solace-MQ JMS的ConnectionFactory时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!