129.7. 使用方法
Smooks コンポーネントを使用すると、Camel 内から変換やフラグメント駆動ルーティングなどの Smooks のすべての機能を活用できます。以下のように、既存の Smooks 設定を取得して Camel ルートから参照できます。
Java
from("file:inputDir?noop=true")
.to("smooks:smooks-config.xml")
.to("jms:queue:order");
YAML
- from:
uri: file:inputDir?noop=true
steps:
- to: smooks:smooks-config.xml
- to: jms:queue:order
Smooks コンポーネントは、必須の設定ファイル (上記の例では smooks-config.xml) を使用して設定されます。上記のルートを見ると、コンポーネントがどのような種類の出力を生成しているかはわかりません。デフォルトでは、メッセージ本体の出力はストリームですが、次に示すように Smooks 設定で {https://www.smooks.org/xsd/smooks/smooks-core-1.6.xsd}exports を設定して出力のタイプを変更できます。
smooks-config.xml
<smooks-resource-list xmlns="https://www.smooks.org/xsd/smooks-2.0.xsd"
xmlns:edi="https://www.smooks.org/xsd/smooks/edi-2.0.xsd"
xmlns:core="https://www.smooks.org/xsd/smooks/smooks-core-1.6.xsd">
<core:exports>
<core:result type="org.smooks.io.sink.StringSink"/>
</core:exports>
<edi:parser schemaUri="/edi-mapping-model.dfdl.xsd" segmentTerminator="%NL;" dataElementSeparator="*"
compositeDataElementSeparator="^"/>
</smooks-resource-list>
この例の {https://www.smooks.org/xsd/smooks/smooks-core-1.6.xsd}exports 要素は、実行結果を文字列として Camel にエクスポートするように Smooks を設定します。結果を文字列としてエクスポートすると、結果全体がメモリー内に保持されるため、大きなペイロードで予期しないパフォーマンスの問題が発生する可能性があることに注意してください。
129.7.1. Bean ルーティング リンクのコピーリンクがクリップボードにコピーされました!
Smooks は、Smooks 設定の {https://www.smooks.org/xsd/smooks/camel-1.5.xsd}route 要素を使用して、フラグメントを Camel エンドポイントにルーティングできます。たとえば、Smooks 設定で次のように宣言することでエンドポイントにルーティングできます。
smooks-config.xml
<smooks-resource-list xmlns="https://www.smooks.org/xsd/smooks-2.0.xsd"
xmlns:jb="https://www.smooks.org/xsd/smooks/javabean-1.6.xsd"
xmlns:camel="https://www.smooks.org/xsd/smooks/camel-1.5.xsd">
<!-- Create some bean instances from the input source... -->
<jb:bean beanId="orderItem" ...>
<!-- etc... See Smooks Java Binding docs -->
</jb:bean>
<!-- Route bean to camel endpoints... -->
<camel:route beanId="orderItem">
<camel:to endpoint="direct:slow" if="orderItem.priority = 'Normal'"/>
<camel:to endpoint="direct:express" if="orderItem.priority = 'High'"/>
</camel:route>
</smooks-resource-list>
上記のファイルは、orderItem インスタンスの priority フィールドが Normal と High のどちらであるかに応じて、bean context 内の Java Bean orderItem をエンドポイント direct:slow と direct:express にルーティングするように Smooks を設定します。routeOnElement XML 属性により、条件ではなくイベントセレクターに基づいてルーティングできるようになります。
smooks-config.xml
<smooks-resource-list xmlns="https://www.smooks.org/xsd/smooks-2.0.xsd"
xmlns:jb="https://www.smooks.org/xsd/smooks/javabean-1.6.xsd"
xmlns:camel="https://www.smooks.org/xsd/smooks/camel-1.5.xsd">
<!-- Create some bean instances from the input source... -->
<jb:bean beanId="orderItem" ...>
<!-- etc... See Smooks Java Binding docs -->
</jb:bean>
<!-- Route bean to camel endpoints... -->
<camel:route beanId="orderItem" routeOnElement="order">
<camel:to endpoint="direct:all"/>
</camel:route>
</smooks-resource-list>
複雑なオブジェクトを Camel にルーティングする代わりに、pipeline を使用すると、テンプレート (FreeMarker など) で Bean を参照し、評価されたテンプレートを文字列 (XML、CSV など) として Camel にルーティングできます。