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 の定義済み名前空間

カスタム名前空間

@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,
  )
  {
    ...
  }
  ...
}