57.4.2. アンマーシャリング


from("file://inbox")
  .unmarshal(bindy)
  .to("direct:handleOrders");
Copy to Clipboard Toggle word wrap

または、Spring XML ファイルなど、レジストリーで定義できるデータフォーマットへの名前付き参照を使用できます。

from("file://inbox")
  .unmarshal("myBindyDataFormat")
  .to("direct:handleOrders");
Copy to Clipboard Toggle word wrap

Camel ルートは inbox ディレクトリーの up ファイルを選択し、CSV レコードをモデルオブジェクトのコレクションにアンマーシャリングし、コレクション
handleOrders によって参照されるルートに送信します。

返されるコレクションは、List of Map オブジェクト です。リスト内の各 Map には、CSV の各行からマーシャリングされたモデルオブジェクトが含まれます。これは、各行が複数のオブジェクト に対応することができる ためです。これは、1 行に 1 つのオブジェクトを返すことが予想される場合に混乱する可能性があります。

各オブジェクトは、そのクラス名を使用して取得できます。

List<Map<String, Object>> unmarshaledModels = (List<Map<String, Object>>) exchange.getIn().getBody();

int modelCount = 0;
for (Map<String, Object> model : unmarshaledModels) {
  for (String className : model.keySet()) {
     Object obj = model.get(className);
     LOG.info("Count : " + modelCount + ", " + obj.toString());
  }
 modelCount++;
}

LOG.info("Total CSV records received by the csv bean : " + modelCount);
Copy to Clipboard Toggle word wrap

ルートでの処理のためにこのマップから単一の Order オブジェクトを抽出する場合、以下のように Splitter と Processor の組み合わせを使用できます。

from("file://inbox")
    .unmarshal(bindy)
    .split(body())
        .process(new Processor() {
            public void process(Exchange exchange) throws Exception {
                Message in = exchange.getIn();
                Map<String, Object> modelMap = (Map<String, Object>) in.getBody();
                in.setBody(modelMap.get(Order.class.getCanonicalName()));
            }
        })
        .to("direct:handleSingleOrder")
    .end();
Copy to Clipboard Toggle word wrap

Bindy が CHARSET_NAME プロパティーまたは CHARSET_NAME ヘッダーをエクスチェンジインターフェイスで定義として使用して、アンマーシャリングのために受信した入力ストリームの文字セット変換を行うため、これに対応する必要があります。一部のプロデューサー(例:file-endpoint)では、文字セットを定義できます。文字セット変換は、このプロデューサーによってすでに実行されています。アンマーシャリングに送信する前に、このプロパティーまたはヘッダーをエクスチェンジから削除しないといけない場合があります。削除しない場合には、変換が 2 回実行され、不要な結果が生じる可能性があります。

from("file://inbox?charset=Cp922")
  .removeProperty(Exchange.CHARSET_NAME)
  .unmarshal("myBindyDataFormat")
  .to("direct:handleOrders");
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat