我使用 Spring 和 Jaxb 来监听 JMSQueue,然后将 JMS 消息解组到 java 对象中。然后我期望在我的
@JmsListener
端点上获取该 Java 对象。但相反,我得到了一个 TextMessage
对象。使用调试器,我可以单步执行代码并看到正在发生到 java 对象的转换,但它永远不会到达我的终点。
这是我的配置:
@Bean
public DefaultJmsListenerContainerFactory myContainerFactory() {
DefaultJmsListenerContainerFactory factory =
new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactoryProxy());
factory.setDestinationResolver(destinationResolver());
factory.setMessageConverter(messageConverter());
factory.setConcurrency("1-1");
return factory;
}
@Bean
public MessageConverter messageConverter(){
MarshallingMessageConverter converter = new MarshallingMessageConverter();
Jaxb2Marhsaller jaxbMarshaller = new Jaxb2Marhsaller ();
jaxbMarshaller.setPackagesToScan("mypackage.jms.model");
converter.setUnmarshaller(jaxbMarshaller);
converter.setMarshaller(jaxbMarshaller);
return converter;
}
我的终点:
@Component
public class QueueMessageReceiver {
@JmsListener(containerFactory = "myContainerFactory", destination = "jms/Queue")
public void process(Message message) {
try {
System.out.println(message);
}catch(Exception e){
e.printStackTrace();
}
}
}
问题在于
QueueMessageReceiver.process
方法有一个 TextMessage
而不是转换后的对象。
尝试更改处理方法以使用您期望的对象而不是 Message
@JmsListener(containerFactory = "myContainerFactory", destination = "jms/Queue")
public void process(YourAwesomeObject theObject) {
....
}