Weblogic Java无法将来自Oracle AQ的消息出列

Weblogic Java无法将来自Oracle AQ的消息出列,weblogic,spring-jms,oracle-aq,Weblogic,Spring Jms,Oracle Aq,我试图在weblogic中部署一个基于SpringDefaultMessageListenerContainer的应用程序。我已经使用外部服务器设置了weblogic,以提供对AQ连接工厂和JNDI名称下的目标的访问 我有一个简单的消息侦听器,它记录它接收到的消息(只是一个测试),我将此消息侦听器包装在Spring DMLC中,如下所示: <jee:jndi-lookup id="connectionFactory" jndi-name="jms/aq/admAQCF" /> &l

我试图在weblogic中部署一个基于SpringDefaultMessageListenerContainer的应用程序。我已经使用外部服务器设置了weblogic,以提供对AQ连接工厂和JNDI名称下的目标的访问

我有一个简单的消息侦听器,它记录它接收到的消息(只是一个测试),我将此消息侦听器包装在Spring DMLC中,如下所示:

<jee:jndi-lookup id="connectionFactory" jndi-name="jms/aq/admAQCF"  />
<jee:jndi-lookup id="handlersDest"  jndi-name="jms/aq/dpqueue"/>

 <beans:bean id="testMessageListener" class="aquila.administrator.docprod.core.handler.adm.TestHandler"/>

 <beans:bean id="testMLC" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <beans:property name="connectionFactory" ref="connectionFactory"/>
    <beans:property name="destination" ref="handlersDest"/>
    <beans:property name="messageListener" ref="testMessageListener"/>
 </beans:bean>

每当我尝试在weblogic中部署此应用程序时,DMLC都会出现以下异常:

testMLC-26 [Tue Mar 13 14:07:52 GMT 2012] AQjmsConsumer.jdbcDequeue: Exception: oracle.jms.AQjmsException: JMS-122: Internal error Corrupted message
oracle.jms.AQjmsException: JMS-122: Internal error Corrupted message
        at oracle.jms.AQjmsError.throwEx(AQjmsError.java:334)
        at oracle.jms.AQjmsUtil.getTextData(AQjmsUtil.java:751)
        at oracle.jms.AQjmsTextMessage.readTextMessageContainer(AQjmsTextMessage.java:308)
        at oracle.jms.AQjmsTextMessage.<init>(AQjmsTextMessage.java:148)
        at oracle.jms.AQjmsConsumer.jdbcDequeue(AQjmsConsumer.java:1389)
        at oracle.jms.AQjmsConsumer.receiveFromAQ(AQjmsConsumer.java:1035)
        at oracle.jms.AQjmsConsumer.receiveFromAQ(AQjmsConsumer.java:960)
        at oracle.jms.AQjmsConsumer.receiveFromAQ(AQjmsConsumer.java:938)
        at oracle.jms.AQjmsConsumer.receive(AQjmsConsumer.java:790)
        at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveMessage(AbstractPollingMessageListenerContainer.java:431)
        at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:311)
        at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:264)
        at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1071)
        at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1063)
        at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:960)
        at java.lang.Thread.run(Thread.java:662)
testMLC-26[Tue Mar 13 14:07:52 GMT 2012]AQjmsConsumer.jdbcDequeue:异常:oracle.jms.AQjmsException:jms-122:内部错误损坏消息
oracle.jms.AQjmsException:jms-122:内部错误损坏消息
位于oracle.jms.AQjmsError.throwEx(AQjmsError.java:334)
位于oracle.jms.AQjmsUtil.getTextData(AQjmsUtil.java:751)
位于oracle.jms.AQjmsTextMessage.readTextMessageContainer(AQjmsTextMessage.java:308)
在oracle.jms.AQjmsTextMessage上。(AQjmsTextMessage.java:148)
位于oracle.jms.AQjmsConsumer.jdbcDequeue(AQjmsConsumer.java:1389)
位于oracle.jms.AQjmsConsumer.receiveFromAQ(AQjmsConsumer.java:1035)
位于oracle.jms.AQjmsConsumer.receiveFromAQ(AQjmsConsumer.java:960)
位于oracle.jms.AQjmsConsumer.receiveFromAQ(AQjmsConsumer.java:938)
位于oracle.jms.AQjmsConsumer.receive(AQjmsConsumer.java:790)
位于org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveMessage(AbstractPollingMessageListenerContainer.java:431)
位于org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:311)
位于org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:264)
位于org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1071)
位于org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1063)
位于org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:960)
运行(Thread.java:662)
有人知道如何解决这个问题,以便java能够接收队列上的消息吗


感谢

这个问题的答案是将“orai18n.jar”添加到实际试图从消息队列中退出的对象的类路径中。在我的示例中,我将jar添加到应用程序服务器的类路径中,这解决了问题。

如果使用ojdbc10 19.3.0.0,则必须向pom添加相同版本号的orai18n