Spring integration 如何使用spring集成dsl从JMS队列中解组XML
因为我没有足够的声誉来评论关于这个问题的另一个公开话题 () 为了问我的问题,我不得不创造一个新的话题。 我有一个JMS,它轮询队列中的XML消息,我想将这些消息转换为Java对象。 这是我写的代码Spring integration 如何使用spring集成dsl从JMS队列中解组XML,spring-integration,spring-integration-dsl,Spring Integration,Spring Integration Dsl,因为我没有足够的声誉来评论关于这个问题的另一个公开话题 () 为了问我的问题,我不得不创造一个新的话题。 我有一个JMS,它轮询队列中的XML消息,我想将这些消息转换为Java对象。 这是我写的代码 @Bean public IntegrationFlow jmsMessageDrivenRedeliveryFlow() { return IntegrationFlows .from(Jms.messageDrivenChannelAdapter(new Acti
@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;
}
}
根据另一个线程上的答案,如何配置封送拆收器以返回客户对象?
非常感谢。我看到您的
Jms.messageDrivenChannelAdapter()中有这个.jmsMessageConverter(新的封送消息转换器(jaxbMarshaller()))
。从Spring集成的角度来看,这就是您所需要的一切
既然您还有一个问题,我想您的问题是如何教导Jaxb2Marshaller
正确地查看您的客户并解编
这已经是一个JAXB问题:
在前面提到的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) {
/**
*设置新创建的JAXBContext要识别的Java类列表。
*设置此属性,{@link#setContextPath“contextPath”}
*或者需要{@link#setPackagesToScan“packagesToScan”}。
*/
public void setClassesToBeBound(@Nullable Class…classesToBeBound){
非常感谢!将setClassesToBound设置为my class Customer使其工作正常!