Show Table of Contents
第14章 Apache Camel の統合
Camel と Smooks の統合を行うと、Apache Camel 内から Smooks のすべての機能にアクセスすることが可能になります。既存の Smooks 設定を Camel のルートで使用することができます。
Smooks を Apache Camel で使用する方法は 3 つあります。
- SmooksComponent
- SmooksDataformat
- SmooksProcessor
SmooksComponent は、Smooks を用いて Camel メッセージボディーを処理したい時に使用できる Camel のモジュールです。使用するには、Camel のルート設定にルートを追加します。次のコードはそのやり方を示しています。
from("file://inputDir?noop=true")
.to("smooks://smooks-config.xml")
.to("jms:queue:order")
Smooks コンポーネントを設定するには、上記の例にある smooks-config-xml ファイルの値を編集します。上記のルート定義を見るだけでは SmooksComponent がどのようなタイプの出力を生成するか分かりません。出力のタイプは、exports 要素を介して Smooks の設定に表されます。
注記
プログラムを用いて Smooks を設定したい場合は、SmooksProcessor を用いて設定します。
Apache コンポーネントは、Smooks 設定ファイルの後に指定されているオプションを使用できます。現在、SmooksComponent が使用できるオプションは次の 1 つのみです。
- reportPath: 生成される Smooks Execution Report へのパス (ファイル名を含む) です。
SmooksDataFormat は Apache Camel の DataFormat です。あるデータ形式を他のデータ形式に変換し、さらに変換したデータ形式を元に戻すことが可能です。1 つの形式を別の形式に変換することのみを目的とし、他の Smooks 機能を使用する必要がない場合のみ使用してください。
このコード例は、SmooksDataFormat を使用してコンマ区切り値の文字列を Customer オブジェクトインスタンスの java.util.List へ変換する方法を表しています。
SmooksDataFormat sdf = new SmooksDataFormat("csv-smooks-unmarshal-config.xml");
from("direct:unmarshal")
.unmarshal(sdf)
.convertBodyTo(List.class)
.to("mock:result");
SmooksProcessor を使用すると Smooks を完全に制御できます (たとえば、プログラムを用いて基盤の Smooks インスタンスを作成したい場合にこのコンポーネントを使用します)。
SmooksProcessor を使用する場合、Smooks をプログラムを用いて設定し、Smooks インスタンスをコンストラクターに渡すことができます。
次の例は Apache Camel のルートで SmooksProcessor を使用する方法を表しています。
Smooks smooks = new Smooks("edi-to-xml-smooks-config.xml");
ExecutionContext context = smooks.createExecutionContext();
...
SmooksProcessor processor = new SmooksProcessor(smooks, context);
from("file://input?noop=true")
.process(processor)
.to("mock:result");
SmooksComponent と同様、Smooks が生成する結果タイプを指定していません(ある場合)。結果タイプは exports 要素を使用して Smooks 設定に表現するか、次のようにプログラムを用いて同じように表現します。
Smooks smooks = new Smooks();
ExecutionContext context = smooks.createExecutionContext();
smooks.setExports(new Exports(StringResult.class));
SmooksProcessor processor = new SmooksProcessor(smooks, context);
...
from("file://input?noop=true")
.process(processor)
.to("mock:result");
表14.1 Camel プロパティ
| 名前 | 説明 |
|---|---|
camel-dataformat |
この例は SmooksDataFormat の使用方法を表しています (DataFormat は Camel の org.apache.camel.spi.DataFormat を実装するクラスです)。
|
camel-integration |
この例は Camel SmooksComponent.("smooks://file:./configs/smooks-config.xml") の使用方法を表しています。
|
splitting-camel |
この例は、Smooks と Apache Camel を使用して UN/EDIFACT メッセージインターチェンジを処理し、個別のインターチェンジメッセージを Java および XML 断片に分割し、Apache Camel を使用して断片をルーティングする方法を表しています。
|

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.