2017-01-16 4 views
0

XMLファイル(動的)を大量に処理するジョブを実行していますが、特定のJavaオブジェクトを@XmlRootElementに定義することはできません。私はXMLオブジェクトをMapオブジェクトに変換する必要があると思います。Springバッチ - JsonへのXMLファイルのアンマーシャリング - 動的XML

例:ファイルの構造はわかりませんが、動的です。私は2つのxmlファイルを持っていると私は両方のファイルを処理する1つのジョブを実行しようとします。

ファイル1 -

<Pessoa> 
    <campos> 
     <campo> 
     <nome>Carlos</nome> 
     <sobrenome>Silva</sobrenome> 
     </campo> 
     <campo> 
     <nome>Carlos</nome> 
     <sobrenome>Silva</sobrenome> 
     </campo> 
    </campos> 
</Pessoa>  

ファイル2 -

<Parent> 
    <childs> 
    <child>Lala</campo> 
    <child>Lala</campo> 
    </childs>  
</Parent> 

ItemReaderとItemProcessorは、両方のファイルを実行する必要があります。ファイルは動的であり、クラスにバインドするように通知することはできません。たとえば :このファイルは可能であり、処理するために、春のバッチを使用してStaxEventItemReader

Jaxb2Marshaller unmarshaller = new Jaxb2Marshaller(); 
    // It is possible? The Map.class hasn't @XmlRootElement declaration 
    //unmarshaller.setClassesToBeBound(Map.class); 
    setUnmarshaller(unmarshaller); 
    setFragmentRootElementNames(new String[] {"Pessoa", "Parent"}); 

拡張私の読者は、私の要件に従って?

ありがとうございます!

+0

使用するクラス構造がない場合は、xmlからjsonに直接移動しませんか?あなたはまだ私がこれを正しく理解している場合、jsonを生成するクラスを持っていません – efekctive

+0

Jsoupを使用してXMLをメモリに入れ、JsonBuilderを使用してsonファイルを作成することができます – efekctive

+0

jsonでxmlファイルを変換する必要があります。春のバッチ処理。私はこのプロセスが高価になると思います。 –

答えて

0

スプリングバッチはジョブ用です。あなたはまだジョブをコード化する必要があります。クラスが存在しないため、jaxb(クラスとファイルの間のブローカ)というプロセスを記述する方法は必要ありません。これは、十分なバッチジョブを実行する上でコストがかかります。私はjaxbをバイパスしてjsoupでメモリに* .xmlをロードし、次にjsonビルダーで息子に変換します

関連する問題