Spring integration 如何使用spring集成dsl从JMS队列中解组XML

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

因为我没有足够的声誉来评论关于这个问题的另一个公开话题

()

为了问我的问题,我不得不创造一个新的话题。 我有一个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;
    }

}
根据另一个线程上的答案,如何配置封送拆收器以返回客户对象?
非常感谢。

我看到您的
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使其工作正常!