繁体   English   中英

Spring JMSListener和JAXB编组

[英]Spring JMSListener and JAXB marshalling

我有一个这样的JMS“端点”:

@JmsListener(destination = "TestQueue")
public void doSomething(MyJaxbAnnotatedClass myclass) {
}

当然具有所需的applicationContext配置,例如<jms:annotation-driven />之类。 当我的方法签名只是一个

public void doSomething(String xmlString)

但是我想像在Spring-MVC上下文中使用JSON一样,由Spring完成自动解组。 但是以某种方式Spring需要为此进行更多配置,因为在尝试MyJaxbAnnotatedClass参数时我得到了以下堆栈跟踪:

 Caused by: org.springframework.messaging.converter.MessageConversionException: No converter found to convert to class de.xxx.xxx.MyJaxbAnnotatedClass, message=GenericMessage [payload=<BRNArtikelStamm:EcomxProducts 
xmlns:BRNfoo="http://www.xxx.xxx/foofoo" 

所以我认为我必须以某种方式告诉Spring如何解组? 由于JAXB是进行序列化的一种很常见的方式,因此我希望有一个通用的配置需要应用。

感谢您的任何投入。

您需要注册一个能够做到这一点的消息转换器,几乎就像您进行任何非平凡的转换一样。

由于您显然使用的是默认的JmsListerContainerFactory ,因此可以对其进行扩展以为您的侦听器注册消息转换器,如下所示:

@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory());
    factory.setMessageConverter(jmsMessageConverter());
    return factory;
}

您的jmsMessageConverter定义了如何反序列化消息(可以在生产端重用同一实例)。 使用Jaxb2Marshaller尝试MarshallingMessageConverter

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM