第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 を使用して断片をルーティングする方法を表しています。