Я понял, что для MessageListenerAdapter
, а не для преобразования сообщения атрибут messageConverter
должен быть установлен в null
. Однако при использовании конфигурации пространства имен невозможно отключить конвертер сообщений по умолчанию, который создается автоматически.
Код в AbstractListenerContainerParser
проверяет, не установлен ли атрибут message-converter
в <jms:listener-container>
или указывает на допустимый компонент. В противном случае создается экземпляр SimpleMessageAdapter
.
Чтобы обойти эту проблему, я создал NoopMessageConverter
, который решает проблему
public class NoopMessageConverter implements MessageConverter {
@Override
public Message toMessage(Object object, Session session)
throws JMSException, MessageConversionException {
return (Message) object;
}
@Override
public Object fromMessage(Message message)
throws JMSException, MessageConversionException {
return message;
}
}
Затем настройте <jms:listener-container>
следующим образом
<bean id="noopMessageConverter" class="NoopMessageConverter"/>
<jms:listener-container message-converter="noopMessageConverter">
<jms:listener destination="queue.test" ref="myService" method="receive"/>
</jms:listener-container>
Затем вы можете создать свой боб следующим образом, и метод receive
называется
class MyService {
public void receive(TextMessage msg) {
...
}
}