0

使用 XML 配置 - 我有MarshallingMessageConverter工作;但是,我仍然想发送一些TextMessage带有简单String值的消息。

似乎我的配置迫使我从一条沟(无自动 JAXB 编组)进入另一条沟(仅 JAXB 编组):

这是我的相关 XML 配置:

<bean id="jaxbConverter" class="org.springframework.jms.support.converter.MarshallingMessageConverter">
    <property name="marshaller" ref="jaxb2Marshaller" />
    <property name="unmarshaller" ref="jaxb2Marshaller" />
</bean>

<bean id="jmsListenerContainerFactory"
      class="org.springframework.jms.config.DefaultJmsListenerContainerFactory">
    <property name="errorHandler" ref="jmsErrorHandler" />
    <property name="connectionFactory" ref="connectionFactory"/>
    <property name="destinationResolver" ref="jmsDestinationResolver"/>
    <property name="messageConverter" ref="jaxbConverter" />
</bean>

JAXB 编组工作正常,但有时我想发送一个空正文(仅限标头属性)消息;这会导致如下错误:

.UnmarshallingFailureException: JAXB unmarshalling exception; nested exception is javax.xml.bind.UnmarshalException
 - with linked exception:
[org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.]

这是有道理的,因为我在正文中发送了一个非 JAXB 字符串(或什么都没有)。

有没有可能两全其美?-and-的String, byte[],Map转换行为?org.springframework.jms.support.converter.SimpleMessageConverterorg.springframework.jms.support.converter.MarshallingMessageConverter

@JmsListener通过与另一个转换器创建第二个容器工厂并在我的注释中明确使用它来实现这一点的唯一方法是什么?

4

1 回答 1

2

创建一个简单的DelegatingMessageConverter(implement MessageConverter) 并让它基于消息属性委托给SimpleMessageConverter, MarshallingMessageConverter(甚至是 a ),例如- , , 。MappingJackson2MessageConvertermessage.getStringProperty("contentType")text/plainapplication/xmlapplication/json

于 2016-01-30T14:52:17.557 回答