2011-07-21 8 views
1

EDIT1マッピングのJavaObject

いずれかが、いくつかのより多くのorintedタイトルを持っているので、もし私が

を提案してください私は私の手をしようとしていますタイトルは、問題のために最善であるかどうかわからないです私は、ファイルシステムからいくつかのcsvファイルを取得する必要があり、ここでXML形式に変換し、私はこのためにラクダを使用していますいくつかの他のシステム

の上に置く必要があるとラクダの私のサンプルPOCコード

です私はリストを反復し、各Javaオブジェクトに値を設定するJavaコンバータ CSVConverterBeanを書かれているのJavaリスト List<List<String>> にCSVファイルをひそかますこのアプローチラクダのCSVアンマーシャラーで
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(); 
      } 

} 

210はJAXB 2によって生成されます。 x、最終オブジェクトがXMLにマーシャリングされ、ファイルが保存されています。

将来的にマッピングを変更する要求が発生した場合は、CSVConverterBeanで変更する必要があり、このJavaファイルを再コンパイルして再配布する必要がある場合避ける。

私の質問は、私たちがCamelから与えられたjavaリストの値をJaxBによって生成されたそれぞれのJavaクラスにマップすることができるので、Javaコードを再コンパイルする必要はありません。

答えて

0

dom4j.camelを使用してこの問題を解決しました。リストとしてCSVを返しました。まず、ヘッダーを読み取り、これらのヘッダーとXMLタグと値を実行時の値を尊重して作成しました。

0

CSVデータの列をBeanプロパティにマップするための設定ファイルを提供し、そのファイルを読み込んで変換を処理するアルゴリズムをコーディングすることができます。

あなたは.propertiesファイルで行うことができます:

あなたのCSVの列ごとに
# mapping.properties 
column0=propertyOne 
column1=propertyTwo 

、あなたはプロパティファイルから値を取得し、あなたは上の値を設定する必要がどのプロパティを見つけます。

これはあなたにいくつかのヒントを与えるかもしれません。

データが変更されるたびに、クラスではなくプロパティファイルを変更するだけで済みます。

0

ブルーノのアイデアを使用しますが、csvファイルのヘッダー行からプロパティ名を読み取ります。