2015-09-17 3 views
1

Я использую Spring и Jaxb для прослушивания JMSQueue, а затем unmarshall JMS-сообщения в java-объект. Затем я ожидаю получить этот объект Java на моей конечной точке @JmsListener. Но вместо этого я получаю объект TextMessage. Используя отладчик, я могу пройти через код и увидеть, что происходит переход к объекту java, но он никогда не доходит до конечной точки.Как получить мой преобразованный объект с помощью @JmsListener

Вот мой конфиг:

@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; 
    } 


And my endpoint: 

@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 и не преобразованный объект. Помощь будет принята с благодарностью.

+1

Измените метод обработки вместо 'Message' использовать тип объекта, который вы ожидаете. –

ответ

1

Попробуйте изменить метод обработки, чтобы использовать объект, который вы ожидаете, а не сообщение

@JmsListener(containerFactory = "myContainerFactory", destination = "jms/Queue") 
    public void process(YourAwesomeObject theObject) { 
      .... 
    } 
Смежные вопросы