如何使用@JmsListener获取转换后的对象

问题描述 投票:0回答:1

我使用 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
而不是转换后的对象。

spring jaxb jms
1个回答
1
投票

尝试更改处理方法以使用您期望的对象而不是 Message

 @JmsListener(containerFactory = "myContainerFactory", destination = "jms/Queue")
  public void process(YourAwesomeObject theObject) {
           ....
  }
© www.soinside.com 2019 - 2024. All rights reserved.