次のようにフォーマットされた処理中のCSVがあります。
01,H2,H3
02,B2,B3,B4,B5
02,B2,B3,B4,B5
02,B2,B3,B4,B5
02,B2,B3,B4,B5
01,H2,H3
02,B2,B3,B4,B5
02,B2,B3,B4,B5
01,H2,H3
02,B2,B3,B4,B5
02,B2,B3,B4,B5
02,B2,B3,B4,B5
01 はヘッダー行を指定し、02 は本文行を指定します。
ヘッダー データを取得して本文メッセージに追加する必要があるため、最終的に次のようなメッセージを送信します。
H2,H3,B2,B3,B4,B5
H2,H3,B2,B3,B4,B5
H2,H3,B2,B3,B4,B5
集約しようとしましたが、このシナリオでは適切な EIP ではないようです。複数のメッセージを 1 つにまとめるのではなく、同じメッセージを何度も組み合わせているだけなので...基本的なレベルでは、ヘッダーにアクセスする必要があります。本体を処理するためのデータ (実際には 1 つのフィールドにすぎません)。ヘッダーとプロパティが各交換でクリアされるため、変数を設定する方法がわかりません。任意のヒント?前もって感謝します。ラクダのルートを現状のまま見るのに役立つかどうか教えてください.
役立つかもしれないラクダのルートは次のとおりです。
from("direct:inventory")
.split(body().tokenize("\n")).streaming()
.throttle(100)
.choice()
.when(property("CamelSplitComplete").isEqualTo(true))
.log("Processed ${property.CamelSplitSize} updates")
.end()
.unmarshal(csv)
.log("${body}")
.aggregate(header("CamelFileLastModified"), new InventoryAggregationStrategy())
.completionPredicate(header("aggregationComplete").isEqualTo(true))
.to("freemarker://templates/inventory.ftl")
.unmarshal().string("UTF-8")
.unmarshal().json(JsonLibrary.Jackson)
.convertBodyTo(JsonObject.class)
.to("endpoint");