検索

32.8. 変数と関数の使用

download PDF

ルート内の変数の評価

ルート内で XPath 式を評価する場合、XPath 変数を使用して、現在のエクスチェンジの内容、O/S 環境変数、および Java システムプロパティーにアクセスすることができます。XML 名前空間を介して変数にアクセスする場合、変数の値にアクセスするための構文は $VarName または $Prefix:VarName です。

たとえば、In メッセージのボディーには $in:bodyIn メッセージのヘッダー値には $in:HeaderName としてアクセスできます。O/S 環境変数は $env:EnvVar として、Java システムプロパティーは $system:SysVar としてアクセスできます。

以下の例では、最初のルートは /person/city 要素の値を抽出し、city ヘッダーに挿入します。2 番目のルートは、XPath 式 ($in:city = 'London') を使用してエクスチェンジをフィルタリングします。$in:city 変数は city ヘッダーの値に置き換えられます。

from("file:src/data?noop=true")
    .setHeader("city").xpath("/person/city/text()")
    .to("direct:tie");

from("direct:tie")
    .filter().xpath("$in:city = 'London'").to("file:target/messages/uk");

ルート内の関数の評価

標準の 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");

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>");

この方法で定義された変数は、自動的にグローバル名前空間に入力されることに注意してください (たとえば、変数 $test は接頭辞を使用しません)。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.