Spring Boot JMS MarshallingMessageConverter в ответах - PullRequest
0 голосов
/ 27 июня 2018

У меня есть JMS-слушатель, похожий на тот, что сделан здесь:

Синхронная отправка и получение сообщений с использованием шаблона JMS и Spring Boot

Получает полезную нагрузку XML. Но в отличие от этого, я хочу также вернуть ответ. Если я возвращаю String, все работает нормально, но, как и в случае с полезной нагрузкой сообщения, я хочу вернуть объект JAXB.

Однако, если я возвращаю сообщение, Spring пытается преобразовать объект с помощью SimpleMessageConverter.

Как я могу настроить MarshallingMessageConverter для использования при преобразовании полезной нагрузки ответа?

1 Ответ

0 голосов
/ 27 июня 2018

Мне пришлось настроить конвертер сообщений DefaultJmsListenerContainerFactory.

Но что странно, у меня уже есть MarshallingMessageConverter для DefaultMessageHandlerMethodFactory и JmsMessagingTemplate, и он из другого пакета Java (org.springframework.messaging.converter.MarshallingMessageConverter).

@Bean
public JmsListenerContainerFactory<?> jmsListenerFactory(ConnectionFactory connectionFactory,
    DefaultJmsListenerContainerFactoryConfigurer configurer)
{
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setErrorHandler(errorHandler());
    factory.setMessageConverter(jmsMarshallingMessageConverter());  // !!!!

    configurer.configure(factory, connectionFactory);

    return factory;
}

@Bean
public org.springframework.jms.support.converter.MarshallingMessageConverter jmsMarshallingMessageConverter()
{
    Jaxb2Marshaller marshaller = marshaller();

    org.springframework.jms.support.converter.MarshallingMessageConverter converter =
        new org.springframework.jms.support.converter.MarshallingMessageConverter();
    converter.setMarshaller(marshaller);
    converter.setUnmarshaller(marshaller);
    converter.setTargetType(MessageType.TEXT);

    return converter;
}
...