【发布时间】:2016-12-20 16:00:54
【问题描述】:
我有一个基于 Spring 4.1 构建的应用程序。我正在尝试使用 XML 配置创建 JMS 侦听器,并尝试将传入的 XML 消息转换为 Java 对象。下面是我的xml配置:
<jms:listener-container concurrency="10"
connection-factory="connectionFactory"
message-converter="marshallingMessageConverter">
<jms:listener destination="destination.name" ref="messageListener" method="processMessage"/>
</jms:listener-container>
<bean id="messageListener" class="com.example.CustomMessageListener">
</bean>
<bean id="marshallingMessageConverter" class="org.springframework.jms.support.converter.MarshallingMessageConverter">
<property name="marshaller" ref="xmlMarshaller"/>
<property name="unmarshaller" ref="xmlMarshaller"/>
</bean>
<bean id="xmlMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound" value="com.example.CustomObject"/>
</bean>
com.example.CustomMessageListener 类如下所示:
public class CustomMessageListener{
public void processMessage(Message message, CustomObject object){
//Do Something.
}
现在,当我将消息发布到目标队列时,侦听器上的方法 processMessage() 没有被调用,并且我在 spring 日志中收到以下错误:
Failed to invoke target method 'processMessage' with arguments {com.example.CustomObject@52ee271d};
nested exception is java.lang.NoSuchMethodException:
com.example.CustomMessageListener.processMessage(com.example.CustomObject).
现在,如果我将 Listerner 方法的参数更改为只接受 CustomObject,它会起作用,并且我会从 XML 中正确构造 CustomObject:
public void processMessage(CustomObject, object)
但我还需要原始的javax.jms.Message 实例,根据this 文档,应该可以通过在参数列表中指定它来接收该实例。
有人可以帮我吗?
【问题讨论】:
-
是的,这是可能的,但是如果您查看的是针对监听器的注释版本而不是 XML 定义的监听器版本的文档。
标签: spring spring-jms