【问题标题】:How to Unmarshall XML from JMS queue Using spring integration dsl如何使用 spring 集成 dsl 从 JMS 队列中解组 XML
【发布时间】: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 对象? 提前非常感谢。

【问题讨论】:

    标签: spring-integration spring-integration-dsl


    【解决方案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 使其工作!
    猜你喜欢
    • 2018-09-18
    • 1970-01-01
    • 2019-12-31
    • 2014-09-20
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多