以声明方式将JavaObject映射到Javabeans

以声明方式将JavaObject映射到Javabeans,java,mapping,apache-camel,Java,Mapping,Apache Camel,编辑1 我不确定这个标题是否最适合这个问题,所以如果有更多的标题,请建议 我正在尝试使用camel,我必须从文件系统获取一些csv文件,并需要将其转换为xml格式,然后将其放在其他系统上 我正在为此使用camel,这是我的示例POC代码 import org.apache.camel.CamelContext; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel

编辑1

我不确定这个标题是否最适合这个问题,所以如果有更多的标题,请建议

我正在尝试使用camel,我必须从文件系统获取一些csv文件,并需要将其转换为xml格式,然后将其放在其他系统上

我正在为此使用camel,这是我的示例POC代码

import org.apache.camel.CamelContext;

import org.apache.camel.Exchange;

import org.apache.camel.Message;

import org.apache.camel.Processor;

import org.apache.camel.builder.RouteBuilder;

import org.apache.camel.impl.DefaultCamelContext;
import com.poc.convertor.CSVConverterBean;

  public class TestPOC {

           public static void main(String args[]) throws Exception {
           CamelContext context = new DefaultCamelContext();
           context.addRoutes(new RouteBuilder() {

                  public void configure() {
                          from("file:data/csv?noop=true").unmarshal().csv().bean(new CSVConverterBean(),"processCSVInvoice").to("file:data/csvoutput?fileName=test.xml").marshal("jaxb");


                  }

              });
               context.start();
               Thread.sleep(1000);
               context.stop();
          }

}
在这种方法中,camel csv解组器将csv文件转换为java列表 我已经编写了一个java转换器CSVConverterBean,它将迭代列表并设置jaxb 2.x生成的各个java对象中的值,最后一个对象被封送到xml中,文件被保存

一切都正常工作,只有一个问题,如果将来出现任何更改映射的请求,我们需要在CSVConverterBean中进行修改,而这个java文件需要重新编译,需要重新分发,这是我们想要避免的


我的问题是,是否有任何方法可以将Camel提供的java列表中的值映射到JaxB生成的各个java类,从而避免重新编译java代码的需要。

您可以提供一个从到类型的配置文件,将CSV数据的列映射到Bean属性,并编写一个算法来读取该文件并处理转换

您可以使用.properties文件:

# mapping.properties
column0=propertyOne
column1=propertyTwo
对于CSV中的每一列,您都可以从属性文件中获取值,并找到应该在哪个属性上设置值

int columnIndex = 0;
for(String column : csvColumns) {
    String property = findProperty(columnIndex);
    reflectionUtil.setValue(object, property, column);
    columnIndex++;
}
这可能会给你一些提示


每当数据发生更改时,您只需要更改属性文件,而不需要更改类。

使用Bruno的想法,但是从csv文件的标题行读取属性名称。

我已经使用dom4j解决了这个问题。camel将csv作为列表返回给我,首先我读取标题,然后将这些标题、XML标记和值作为运行时的受尊重值