【问题标题】:I want to convert csv file to xml我想将 csv 文件转换为 xml
【发布时间】:2019-08-30 01:15:15
【问题描述】:

我想将 csv 文件转换为 xml,并且我想将转换后的 xml 文件发送到 activemq 中的队列中。是否有任何示例代码或任何参考网站或博客,请帮助查找该程序的示例代码..

【问题讨论】:

    标签: apache-camel activemq


    【解决方案1】:

    使用BindyXstream 组件。来自http://workingwithqueues.blogspot.ch/2012/07/converting-csv-to-xml-with-camel-bindy.html(使用 JMS 端点而不是文件端点):

    DataFormat bindy = new BindyCsvDataFormat("com.package.dto");
    from("file://TEST?fileName=Employee.csv")
        .unmarshal(bindy)
        .marshal()
        .xstream()
        .to("jms:queue:FOO.BAR"); 
    

    要连接到 JMS,请查看 JMSActiveMQ 组件。

    【讨论】:

    • 感谢彼得的回复...在将文件从 csv 转换为 xml 之前我有这个示例,它无法连接到 activemq..
    • @Rahulbujji 要连接到 ActiveMQ,请查看 camel.apache.org/activemq.html
    • @Rahulbujji 如果答案对您有帮助,您可以将其标记为正确
    【解决方案2】:
    package org.mycompany.conversion;
    
    import java.util.List;
    
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlElementWrapper;
    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlRootElement
    @XmlAccessorType(XmlAccessType.FIELD)
    public class Greeting {
    
        @XmlElementWrapper(name = "Person")
        @XmlElement(name = "persons")
        private List<Person> persons;
    
        public List<Person> getPerson() {
            return persons;
        }
    
        public void setPerson(List<Person> persons) {
            this.persons = persons;
        }
    
    }
    
    ========================================================================================
    package org.mycompany.conversion;
    
    import java.util.List;
    
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    
    import org.apache.camel.dataformat.bindy.annotation.CsvRecord;
    import org.apache.camel.dataformat.bindy.annotation.DataField;
    
    @XmlRootElement
    @XmlAccessorType(XmlAccessType.FIELD)
    @CsvRecord(separator = ",")
    public class Person {
    
        @DataField(pos = 1)
        @XmlElement
        private int id;
        @DataField(pos = 2)
        @XmlElement
        private String name;
        @DataField(pos = 3)
        @XmlElement
        private int age;
    
    
    
        @Override
        public String toString() {
            return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
    }
    ======================================================================================
    package org.mycompany.conversion;
    
    import javax.xml.bind.JAXBContext;
    
    import org.apache.camel.CamelContext;
    import org.apache.camel.Exchange;
    import org.apache.camel.Processor;
    import org.apache.camel.builder.RouteBuilder;
    import org.apache.camel.converter.jaxb.JaxbDataFormat;
    import org.apache.camel.dataformat.bindy.csv.BindyCsvDataFormat;
    import org.apache.camel.impl.DefaultCamelContext;
    import org.apache.camel.spi.DataFormat;
    
    public class CsvConversion {
    
        public static void main(String[] args) throws Exception {
    
            JaxbDataFormat xmlDataFormat = new JaxbDataFormat();
            JAXBContext con = JAXBContext.newInstance(Greeting.class);
            xmlDataFormat.setContext(con);
            DataFormat bindy = new BindyCsvDataFormat(Person.class);
            CamelContext context = new DefaultCamelContext();
            context.addRoutes(new RouteBuilder() {
                @Override
                public void configure() throws Exception {
    
                    from("file:src/main/data/in/csv?noop=true").split().tokenize("\n").unmarshal(bindy)
                            // constanr(true):-aggregate all using same expression
                            .aggregate(constant(true), new AttachAggregation())
                            //mandatory after aggregate
                            .completionTimeout(100)//end after this gives problem
                            .marshal(xmlDataFormat).log("xml body is ${body}")
                            .to("file:src/main/data/in/xml?fileName=convertedXml.xml");// .aggregate(new
                                                                                        // AttachAggreagation());
                }
            });
            context.start();
            Thread.sleep(5000);
        }
    }
    =========================================================================================
    
    package org.mycompany.conversion;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.camel.Exchange;
    import org.apache.camel.processor.aggregate.AggregationStrategy;
    
    public class AttachAggregation implements AggregationStrategy {
    
        List<Person> list = new ArrayList();
        Greeting gre = new Greeting();
    
        @Override
    //person-address
        // greeting-user
        public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
    
            if (oldExchange == null) {
                Person newBody1 = newExchange.getIn().getBody(Person.class);
                list.add(newBody1);
                return newExchange;
            } else {
                Person newBody2 = newExchange.getIn().getBody(Person.class);
                list.add(newBody2);
    
                gre.setPerson(list);
                oldExchange.getIn().setBody(gre);
                return oldExchange;
            }
    
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2020-02-22
      • 2011-03-05
      • 2015-10-28
      • 2014-11-22
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多