我想将csv文件转换为xml

时间:2014-04-26 07:12:38

标签: apache-camel activemq

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

2 个答案:

答案 0 :(得分:0)

使用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组件。

答案 1 :(得分:0)

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;
        }

    }

}