使用apache camel将CSV文件转换为xml文件:未创建XML文件

时间:2016-03-30 07:40:33

标签: xml apache csv apache-camel

public class ConverterRoute implements RoutesBuilder {

    public void addRoutesToCamelContext(CamelContext context) throws Exception {
        Tracer tracer = new Tracer();
        tracer.setTraceOutExchanges(true);

        // we configure the default trace formatter where we can
        // specify which fields we want in the output
        DefaultTraceFormatter formatter = new DefaultTraceFormatter();
        formatter.setShowOutBody(true);
        formatter.setShowOutBodyType(true);

        // set to use our formatter
        tracer.setFormatter(formatter);

        context.addInterceptStrategy(tracer);
        context.addRoutes(new RouteBuilder() {

            public void configure() {


                try {
                    DataFormat bindy = new BindyCsvDataFormat(com.dto.EmployeeDTO.class);
                          from("file://TEST?fileName=Employee.csv").
                          unmarshal(bindy).
                          marshal().
                          xstream().
                          to("file://TESTOUT?fileName=EmployeeXML.xml");
                    /*DataFormat bindy = new BindyCsvDataFormat(com.dto.EmployeeDTO.class);
                      from("F://Employee.csv").
                      unmarshal(bindy).
                      marshal().
                      xstream().
                      to("F://EmployeeXML.xml");*/
                    } catch (Exception e) {
                                e.printStackTrace();
                }

            }
        });
    }

    public static void main(String[] args) {
        try{
            CamelContext context = new DefaultCamelContext();
            ConverterRoute route = new ConverterRoute();
            System.out.println("Starting........");
            route.addRoutesToCamelContext(context);
            context.start();
            Thread.sleep(5000);
            System.out.println("Ending........");
            context.stop();
        }catch(Exception exe){
            exe.printStackTrace();
        }
    }


    @XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@CsvRecord(separator = ",", skipFirstLine = true)
public class EmployeeDTO implements Serializable{
@XmlAttribute
      @DataField(pos = 1)
      private int employeeId;
      @XmlAttribute
      @DataField(pos = 2)
      private String firstName;
      @XmlAttribute
      @DataField(pos = 3)
      private String lastName;
      @XmlAttribute
      @DataField(pos = 4)
      private String role;
}

我收到了以下错误:

  

启动........
  log4j:WARN找不到logger(org.apache.camel.impl.DefaultCamelContext)的appender。   log4j:WARN请正确初始化log4j系统   结束........

在欲望文件夹中没有生成转换后的xml。

1 个答案:

答案 0 :(得分:0)

首先,WARNING表示类路径中没有log4j配置文件。尝试添加一个名为" log4j.properties"的文件。在资源目录中包含以下内容:

log4j.rootLogger=INFO, out
# uncomment the following line to turn on Camel debugging
log4j.logger.org.apache.camel=INFO
log4j.logger.org.apache.camel.component.mongodb=DEBUG
log4j.logger.org.springframework=WARN
log4j.appender.out=org.apache.log4j.ConsoleAppender
log4j.appender.out.layout=org.apache.log4j.PatternLayout
log4j.appender.out.layout.ConversionPattern=[%30.30t] %-30.30c{1} %-5p %m%n

通过以上操作,您将获得IDE中的日志,并可以查看正在进行的操作。

最后,您可以使用JAXB而不是XTREAM。您唯一需要做的就是使用JAXB注释注释EmployeeDTO。