由于我没有足够的声誉来评论与此有关的另一个主题
(How to unmarshall xml using spring integration dsl)
我必须创建一个新主题才能提出自己的问题。 我有一个JMS,它从队列中轮询XML消息,并且我想将这些消息转换为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返回客户对象? 提前谢谢。
答案 0 :(得分:2)
我看到您的.jmsMessageConverter(new MarshallingMessageConverter(jaxbMarshaller())))
中有这个Jms.messageDrivenChannelAdapter()
。从Spring Integration的角度来看,这就是您需要的一切。
由于您仍然有疑问,我想您的问题是如何教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) {