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 式で使用できます。
表32.1 @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,
)
{
...
}
...
}