0

私の入力ファイルはいくつかのタイプの FixedLengthRecord で構成されているため、各投稿を非整列化するための FixedLengthDataFormat がたくさんあります。

  1. 行ごとに体を分割します
  2. まず、どの DataFormat を使用すべきかを理解し、オブジェクトを作成する必要があります
  3. 次にアンマーシャル

このようなもの:

from(myURI)
    .split().tokenize("\n")
        .process(initializeMyBindyDataFormat)
        .unmarshal(bindy)
    .end();

しかし、私の問題は、プロセスを介して初期化すると、そのバインド オブジェクトの NPE を取得することです。しかし、ルート定義の前 (from の前) にバインド オブジェクトを作成すると、正常に動作します。私のバインド オブジェクトはボディに依存しており、ルート定義の前に初期化できません。実際に Apache Camel はルートを開始する前に bindy オブジェクトの初期化を処理します

4

2 に答える 2

1

答えは .inout を使用することです別のルートでアンマーシャリングを行いたいので、簡単な例は次のようになります。

from(myURI)
    .split().tokenize("\n")
        .inout("direct:unmarshalSpecificRow")
    .end();

from(direct:unmarshalSpecificRow")
    .choice()
        .when(firstPredicate)
           unmarshal(new BindyFixedLengthDataFormat(package1)
        .when(secondPredicate)
           unmarshal(new BindyFixedLengthDataFormat(package1)
        .when(thirdPredicate)
           unmarshal(new BindyFixedLengthDataFormat(package1)
        .otherwise()
           .throwException(new IllegalArgumentException("Unrecognised post")
    .end();

jakub -korabの助けに感謝します。

于 2016-03-24T05:29:58.057 に答える