2.6.3. エンドポイントバインディング
バインディングの概要 リンクのコピーリンクがクリップボードにコピーされました!
Apache Camel において、バインディング とは、エンドポイントにコントラクトを結び付ける方法です。たとえば Data Format、Content Enricher、または検証ステップを適用することでコントラクトを結び付けます。入力メッセージには条件または変換が適用され、出力メッセージには補完的な条件または変換が適用されます。
DataFormatBinding リンクのコピーリンクがクリップボードにコピーされました!
DataFormatBinding
クラスは、特定のデータフォーマットをマーシャリングしたりアンマーシャリングしたりするバインディングを定義したい場合に有効です (「マーシャリングとアンマーシャリング」 を参照)。この場合、バインディングの作成に必要なのは、コンストラクターに必要なデータフォーマットへの参照を渡して DataFormatBinding
インスタンスを作成することだけです。
たとえば、例2.2「JAXB バインディング」 の XML DSL スニペットは、Apache Camel エンドポイントに関連付けられたときに、JAXB データフォーマットをマーシャリングおよびアンマーシャリングできるバインディング (ID は jaxb
) を示しています。
例2.2 JAXB バインディング
バインディングとエンドポイントの関連付け リンクのコピーリンクがクリップボードにコピーされました!
エンドポイントとバインディングを関連付けるには、以下の方法を使用できます。
Binding URI リンクのコピーリンクがクリップボードにコピーされました!
バインディングをエンドポイントに関連付けるには、エンドポイント URI に binding:NameOfBinding
をプレフィックスとして付けます。ここで NameOfBinding
は、バインディングの Bean ID になります (例: Spring XML で作成されたバインディング Bean の ID)。
たとえば、以下の例では、ActiveMQ エンドポイントを 例2.2「JAXB バインディング」 で定義された JAXB バインディングに関連付ける方法を示しています。
BindingComponent リンクのコピーリンクがクリップボードにコピーされました!
プレフィックスを使用してバインディングをエンドポイントに関連付ける代わりに、関連付けを暗黙的に行い、バインディングが URI に表示されないようにすることもできます。暗黙的なバインディングを持たない既存のエンドポイントの場合、最も簡単な方法は BindingComponent
クラスを使用してエンドポイントをラップすることです。
たとえば、jaxb
バインディングを activemq
エンドポイントに関連付けるには、以下のように新しい BindingComponent
インスタンスを定義します。
jaxbmq
の 2 つ目のコンストラクター引数 (オプション) で URI プレフィックスを定義します。これで、この jaxbmq
ID をエンドポイント URI のスキームとして使用できるようになりました。たとえば、このバインディングコンポーネントを使用して以下のルートを定義できます。
上記のルートは、Binding URI のアプローチを使用する以下のルートと同じです。
カスタムの Apache Camel コンポーネントを実装する開発者は、org.apache.camel.spi.HasBinding
インターフェースを継承するエンドポイントクラスを実装することで、これを実現できます。
BindingComponent コンストラクター リンクのコピーリンクがクリップボードにコピーされました!
BindingComponent
クラスは以下のコンストラクターをサポートします。
public BindingComponent()
- 無引数の形式です。プロパティー注入を使用してバインディングコンポーネントインスタンスを設定します。
public BindingComponent(Binding binding)
-
このバインディングコンポーネントを指定された
Binding
オブジェクトのbinding
に関連付けます。 public BindingComponent(Binding binding, String uriPrefix)
-
このバインディングコンポーネントを指定された
Binding
オブジェクトのbinding
、および URI プレフィックスuriPrefix
に関連付けます。これが、最も一般的に使用されるコンストラクターです。 public BindingComponent(Binding binding, String uriPrefix, String uriPostfix)
-
このコンストラクターは、追加の URI ポストフィックス
uriPostfix
引数をサポートします。これは、このバインディングコンポーネントを使用して定義された URI に自動的に追加されます。
カスタムバインディングの実装 リンクのコピーリンクがクリップボードにコピーされました!
マーシャリングおよびアンマーシャリングのデータフォーマットに使用される DataFormatBinding
に加えて、独自のカスタムバインディングを実装することができます。カスタムバインディングを以下のように定義します。
-
org.apache.camel.Processor
クラスを実装して、(from
要素に登場) コンシューマーエンドポイントで受信するメッセージに対して変換を行います。 -
補完関係となる
org.apache.camel.Processor
クラスを実装して、プロデューサーエンドポイント (to
要素に登場) から送信されるメッセージに対して逆変換を行います。 -
org.apache.camel.spi.Binding
インターフェースを実装します。これは上記のプロセッサーインスタンスのファクトリーとして機能します。
Binding インターフェース リンクのコピーリンクがクリップボードにコピーされました!
例2.3「org.apache.camel.spi.Binding インターフェース」 は org.apache.camel.spi.Binding
インターフェースの定義を示しています。このインタフェースは、カスタムバインディングを定義するために実装する必要があります。
例2.3 org.apache.camel.spi.Binding インターフェース
バインディングを使うタイミング リンクのコピーリンクがクリップボードにコピーされました!
バインディングは、多くの異なるエンドポイントに同じ種類の変換を適用する必要がある場合に有効です。