32.3. XPath の注入
パラメーターバインディングアノテーション
Apache Camel Bean インテグレーションを使用して Java Bean 上でメソッドを呼び出す場合、@XPath
アノテーションを使用して、エクスチェンジから値を抽出してメソッドパラメーターにバインドすることができます。
たとえば、AccountService
オブジェクトで credit
メソッドを呼び出す以下のルートのフラグメントについて考えてみましょう。
from("queue:payments") .beanRef("accountService","credit") ...
credit
メソッドは、パラメーターバインディングアノテーションを使用してメッセージボディーから関連データを抽出し、以下のようにパラメーターに挿入します。
public class AccountService { ... public void credit( @XPath("/transaction/transfer/receiver/text()") String name, @XPath("/transaction/transfer/amount/text()") String amount ) { ... } ... }
詳細については、カスタマポータルのApache Camel 開発者ガイドのBean インテグレーションを参照してください。
Namespaces
表32.1「@XPath の定義済み名前空間」 は、XPath に対して定義済みの名前空間を示します。これらの名前空間接頭辞は、@XPath
アノテーションに表示される XPath
式で使用できます。
名前空間 URI | 接頭辞 |
---|---|
| |
|
カスタム名前空間
@NamespacePrefix
アノテーションを使用して、カスタム XML 名前空間を定義することができます。@NamespacePrefix
アノテーションを呼び出して、@XPath
アノテーションの namespaces
引数を初期化します。その後、@NamespacePrefix
で定義された名前空間を @XPath
アノテーションの式の値で使用することができます。
たとえば、接頭辞 ex
をカスタム名前空間 http://fusesource.com/examples
と関連付けるには、以下のように @XPath
アノテーションを呼び出します。
public class AccountService { ... public void credit( @XPath( value = "/ex:transaction/ex:transfer/ex:receiver/text()", namespaces = @NamespacePrefix( prefix = "ex", uri = "http://fusesource.com/examples" ) ) String name, @XPath( value = "/ex:transaction/ex:transfer/ex:amount/text()", namespaces = @NamespacePrefix( prefix = "ex", uri = "http://fusesource.com/examples" ) ) String amount, ) { ... } ... }