如何使用 spring 集成 dsl 从 JMS 队列中解组 XML
Posted
技术标签:
【中文标题】如何使用 spring 集成 dsl 从 JMS 队列中解组 XML【英文标题】:How to Unmarshall XML from JMS queue Using spring integration dsl 【发布时间】:2018-12-25 13:17:46 【问题描述】:因为我没有足够的声誉来评论关于此问题的其他话题
(How to unmarshall xml using spring integration dsl)
我必须创建一个新主题才能提出我的问题。 我有一个从队列轮询 XML 消息的 JMS,我想将这些消息转换为 Java 对象。 这是我写的代码
@Bean
public IntegrationFlow jmsMessageDrivenRedeliveryFlow()
return IntegrationFlows
.from(Jms.messageDrivenChannelAdapter(new ActiveMQConnectionFactory("tcp://localhost:61616"))
.errorChannel(IntegrationContextUtils.ERROR_CHANNEL_BEAN_NAME)
.destination("foo.bar").jmsMessageConverter(new MarshallingMessageConverter(jaxbMarshaller())))
.handle(m -> System.out.println(m.getName())).get();
@Bean
public Marshaller jaxbMarshaller()
Jaxb2Marshaller jaxb2Marshaller = new Jaxb2Marshaller();
return jaxb2Marshaller;
我想从 XML 创建的类是具有以下结构的 Customer 类
@XmlRootElement
public class Customer
String name;
int age;
int id;
public String getName()
return name;
@XmlElement
public void setName(String name)
this.name = name;
public int getAge()
return age;
@XmlElement
public void setAge(int age)
this.age = age;
public int getId()
return id;
@XmlAttribute
public void setId(int id)
this.id = id;
根据其他线程上的答案,我如何配置 Marshaller 以返回 Customer 对象? 提前非常感谢。
【问题讨论】:
【参考方案1】:我看到你的Jms.messageDrivenChannelAdapter()
中有这个.jmsMessageConverter(new MarshallingMessageConverter(jaxbMarshaller())))
。从 Spring 集成的角度来看,这就是您所需要的一切。
既然你还有一个问题,我想你的问题是如何教 Jaxb2Marshaller
看到你的 Customer
并正确解组。
这已经是一个 JAXB 问题:https://www.oracle.com/technetwork/articles/javase/index-140168.html。
并且在提到的Jaxb2Marshaller
中是这样的一个属性:
/**
* Set the list of Java classes to be recognized by a newly created JAXBContext.
* <p>Setting either this property, @link #setContextPath "contextPath"
* or @link #setPackagesToScan "packagesToScan" is required.
*/
public void setClassesToBeBound(@Nullable Class<?>... classesToBeBound)
【讨论】:
非常感谢!将 setClassesToBound 设置为我的类 Customer 使其工作!以上是关于如何使用 spring 集成 dsl 从 JMS 队列中解组 XML的主要内容,如果未能解决你的问题,请参考以下文章
在 java 1.7 中将 JMS 出站通道适配器转换为等效的 Spring Integration DSL