使用 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.SimpleMessageConverter
org.springframework.jms.support.converter.MarshallingMessageConverter
@JmsListener
通过与另一个转换器创建第二个容器工厂并在我的注释中明确使用它来实现这一点的唯一方法是什么?