従業員、住所、連絡先ファイルを並行して読み込み、それをbeanIOオブジェクトに変換してbeanIOオブジェクトをマージして、完全なemployeeDetailsオブジェクトを生成します。Apache Camel:File to BeanIOとidに基づくbeanIOオブジェクトのマージ
のempファイル:
1 Foo Engineer
2 Bar AssistantEngineer
のemp連絡先ファイル:
1 8912345678 [email protected]
2 7812345678 [email protected]
のempアドレスファイル:Exchange内EmployeeDetailsBeanIODataFormatオブジェクトで
1 city1 1234
2 city2 2345
予想される出力:
1 Foo Engineer [email protected] city1 1234
2 Bar AssistantEngineer [email protected] city2 2345
各ファイルは、オブジェクト
BeanIODataFormat empFormat = new BeanIODataFormat("beanIO.xml","emp");
BeanIODataFormat empContactFormat = new BeanIODataFormat("beanIO.xml", "empContact");
BeanIODataFormat empAddressFormat = new BeanIODataFormat("beanIO.xml", "empAddress");
from("seda:beanIO").unmarshal(empFormat).log("body - ${body}");
from("seda:beanIOContact").unmarshal(empContactFormat).log("Contact body ${body}");
from("seda:beanIO").unmarshal(empAddressFormat).log("Address body - ${body}");
をbeanioに変換されて、私は次のルートに
from("file://C:/cameltest/employee.txt").to("seda:beanIO");
from("file://C:/cameltest/employeeContact.txt").to("seda:beanIOContact");
from("file://C:/cameltest/employeeAddress.txt").to("seda:beanIOAddress");
を持つ出力が正しくBeanオブジェクトをログに記録します。
ここで、オブジェクトをマージしてEmployeeDetailsオブジェクトを作成する必要があります。誰かが私にこれをする方法を教えてもらえますか?私は読んでいて、アグリゲータはこの仕事をするのに使うことができるようですが、そのアプローチではわかりません。
これに関するサンプルは参考になります。 提案を歓迎します。最初に従業員IDに基づいてファイルをマージし、そこからオブジェクトを作成することをお勧めしますか?私はIOが性能を犠牲にするので、この場合、マージされたファイルをディスクに書きたくない。
ありがとうございました。
感謝オブジェクト返事のために、私はこれを試し、あなたに知らせます。 – jack
それはうまく動作しますが、EmployeeDetailsは1つずつ印刷されます。しかし、私は最後の出力をExchange本体にEmployeeDetails []する必要があるので、最終的なリストを処理してAvro形式に変換するために次のルートに渡すことができます。もう一度集約する必要がありますか? ...... completionSize(3).to( "seda" formList ")?この作業のようなものか、すべてのメッセージをグループ化するためのオプションがあります。 – jack
もう一度集計できます(これは別の質問です)。 setBody(ヘッダ( "詳細"))。骨材(新しいGroupedExchangeAggregationStrategy())(真)。定数.complet ionSize(2)2は、IDS – ltsallas