我正在尝试使用@Resource将定义为JNDI资源的MQQueueConnectionFactory注入我的spring配置中。这样做时我得到了ClassCastException。 我真的很困惑如何解决这个问题。我正在使用JDK7和spring 4.1.6.RELEASE。 MQ客户端以标准方式安装并导出到tomcat类路径。
[ERROR] [TokenId=] [2015-05-29 21:33:53.496] [DispatcherServlet] - [Context initialization failed]
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'messagingConfig': Injection of resource dependencies failed; nested exception is org.
springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'java:comp/env/jms/SSAJMSQueueConnectionFactory' must be of type [javax.jms.ConnectionFactory], but
was actually of type [com.ibm.mq.jms.MQQueueConnectionFactory]
答案 0 :(得分:1)
当你看到一个没有意义的ClassCastException时,例如你知道MQQueueConnectionFactory是ConnectionFactory的扩展,那么它通常会指向一个类加载器问题。
在大多数情况下,MQQueueConnectionFactory已经为ConnectionFactory加载了一个不同的类加载器 - 如果您尝试将其转换为另一个,则会导致ClassCastException,即使您希望它可以正常工作。