32.8. 変数と関数の使用
ルート内の変数の評価 リンクのコピーリンクがクリップボードにコピーされました!
ルート内で XPath 式を評価する場合、XPath 変数を使用して、現在のエクスチェンジの内容、O/S 環境変数、および Java システムプロパティーにアクセスすることができます。XML 名前空間を介して変数にアクセスする場合、変数の値にアクセスするための構文は $VarName または $Prefix:VarName です。
たとえば、In メッセージのボディーには $in:body、In メッセージのヘッダー値には $in:HeaderName としてアクセスできます。O/S 環境変数は $env:EnvVar として、Java システムプロパティーは $system:SysVar としてアクセスできます。
以下の例では、最初のルートは /person/city 要素の値を抽出し、city ヘッダーに挿入します。2 番目のルートは、XPath 式 ($in:city = 'London') を使用してエクスチェンジをフィルタリングします。$in:city 変数は city ヘッダーの値に置き換えられます。
ルート内の関数の評価 リンクのコピーリンクがクリップボードにコピーされました!
標準の XPath 関数に加えて、XPath 言語では追加の関数が定義されています。これらの追加関数 (表32.4「XPath カスタム関数」 に記載) は、基礎となるエクスチェンジへのアクセス、単純な式の評価、Apache Camel のプロパティープレースホルダコンポーネントのプロパティー検索などに使用できます。
たとえば、以下の例は、in:header() 関数と in:body() 関数を使用して、基礎となるエクスチェンジのヘッダーとボディーにアクセスします。
from("direct:start").choice()
.when().xpath("in:header('foo') = 'bar'").to("mock:x")
.when().xpath("in:body() = '<two/>'").to("mock:y")
.otherwise().to("mock:z");
from("direct:start").choice()
.when().xpath("in:header('foo') = 'bar'").to("mock:x")
.when().xpath("in:body() = '<two/>'").to("mock:y")
.otherwise().to("mock:z");
in:HeaderName または in:body 変数で、これらの関数と対応する機能との類似性に注目してください。ただし、これらの関数は構文が若干異なり、in:HeaderName の代わりに in:header('HeaderName')、in:body の代わりに in:body() となっています。
XPathBuilder での変数の評価 リンクのコピーリンクがクリップボードにコピーされました!
XPathBuilder クラスを使用して評価される式で変数を使用することもできます。この場合、評価対象となる Exchange オブジェクトがないため、$in:body や $in:HeaderName などの変数を使用することはできません。しかし、variable(Name、Value) Fluent Builder メソッドを使用してインラインで定義された変数を 使うことができます。
たとえば、以下の XPathBuilder 設定は、$test 変数を評価します。変数の値は、London となるように定義されています。
String var = XPathBuilder.xpath("$test")
.variable("test", "London")
.evaluate(getContext(), "<name>foo</name>");
String var = XPathBuilder.xpath("$test")
.variable("test", "London")
.evaluate(getContext(), "<name>foo</name>");
この方法で定義された変数は、自動的にグローバル名前空間に入力されることに注意してください (たとえば、変数 $test は接頭辞を使用しません)。