Camelバッチをコーディングしようとしています:
- 特定のディレクトリ内のすべてのファイルと各ファイルを処理します。
- XSD スキーマを使用して XML を検証する
- さまざまな部分をアンマーシャルしてデータを処理する
- 例外で停止しない
- 少なくとも 1 つのエラーが発生した場合は、最後に失敗したディレクトリに移動し、それ以外の場合は完了に移動します
私が遭遇する困難:
- ファイル コンポーネントを使用すると、完了/失敗したディレクトリにファイルを自動的に移動できますが、分割/アグリゲーターを使用するとすぐに、ファイルは常に完了に移動され、集計が完了するのを待つことさえありません。
- 例外の管理は直感的ではありません
- スプリットとアグリターは悪夢であり、ドキュメントには十分な「現実世界」の例がありません
- 複雑な構造での XML トークン化は、理解を超えた何かに私たちを導きます
もちろん、私はApache Camelを初めて使用するため、これらの問題に遭遇します:)
私がやろうとしていることのアイデア:
- ファイル コンポーネント (OK)
- XSD 検証 (OK、エラーの場合、ファイル コンポーネントの移動に失敗)
- XML を読み取るために多くの分割/マルチキャストを作成します。エラーが発生した場合、例外を無視し、ヘッダーをエラーのままにして続行します (実際には問題ありません。読み取ることはできますが、正しく集約することができません)。
- 集計します(実際には集計するものは何もありません。すべてのヘッダーを確認したいだけです)
- エラーの場合は、失敗したディレクトリに明示的に移動します
この例の簡略化された XML :
<root>
<library></library>
<books year="2015">
<book></book>
<book></book>
... many
</books>
<books year="2016">
<book></book>
<book></book>
... many
</books>
... many years
</root>
このような XML を使用してバッチをどのように構築しますか? さらに、何よりも先に「ライブラリ」を読む(そしてパイプラインを使用する)必要があるとしましょう。また、ヘッダー(ブール値)にエラーを保存するという考えは良いですか?
注: SO に関する多くの Camel の投稿に返信してくれた Claus Ibsen に感謝します。また、Apache Camel のドキュメントへの単純なリンクを提供するだけでなく、Apache Camel のドキュメント sux.
ありがとう