282.4. OGNL 式のサポート


Camel 2.3 の時点で利用可能

情報: Camel の OGNL サポートは、メソッドの呼び出しのみを対象としています。フィールドにアクセスできません。Camel 2.11.1 以降から、Java 配列の長さフィールドにアクセスするための特別なサポートが追加されました。

Simple および Bean 言語は、チェーンのような方法で Bean を呼び出すための Camel OGNL 表記をサポートするようになりました。Message IN ボディに getAddress () メソッドがある POJO が含まれているとします。

次に、Camel OGNL 表記を使用してアドレスオブジェクトにアクセスできます。

simple("${body.address}")
simple("${body.address.street}")
simple("${body.address.zip}")
Copy to Clipboard Toggle word wrap

Camel は getter の短縮名を理解しますが、任意のメソッドを呼び出すか、次のような実際の名前を使用できます。

simple("${body.address}")
simple("${body.getAddress.getStreet}")
simple("${body.address.getZip}")
simple("${body.doSomething}")
Copy to Clipboard Toggle word wrap

たとえば、本文にアドレスがない場合は、Null セーフ演算子 (?.) を使用して NPE を回避することもできます。

simple("${body?.address?.street}")
Copy to Clipboard Toggle word wrap

Map または List タイプでインデックスを作成することもできるため、次のことができます。

simple("${body[foo].name}")
Copy to Clipboard Toggle word wrap

本文が Map ベースであると想定し、foo をキーとして値を検索し、その値に対して getName メソッドを呼び出します。

キーにスペースがある場合は、'foo bar' のようにキーを引用符で囲む 必要 があります。

simple("${body['foo bar'].name}")
Copy to Clipboard Toggle word wrap

キー名 (ドットありまたはドットなし) を使用して、Map オブジェクトまたは List オブジェクトに直接アクセスできます。

simple("${body[foo]}")
simple("${body[this.is.foo]}")
Copy to Clipboard Toggle word wrap

キー foo に値がないと仮定すると、null セーフ演算子を使用して、次のように NPE を回避できます。

simple("${body[foo]?.name}")
Copy to Clipboard Toggle word wrap

リスト 型にアクセスすることもできます。たとえば、次のようにしてアドレスから行を取得できます。

simple("${body.address.lines[0]}")
simple("${body.address.lines[1]}")
simple("${body.address.lines[2]}")
Copy to Clipboard Toggle word wrap

リストから最後の値を取得するために使用できる特別な last キーワードがあります。

simple("${body.address.lines[last]}")
Copy to Clipboard Toggle word wrap

最後から 2 番目の値を取得するには、数値を除算できるので、last-1 を使用してこれを指定できます。

simple("${body.address.lines[last-1]}")
Copy to Clipboard Toggle word wrap

また、最後の 3 番目も当然、以下のようになります。

simple("${body.address.lines[last-2]}")
Copy to Clipboard Toggle word wrap

そして、リストの size メソッドを呼び出すことができます

simple("${body.address.lines.size}")
Copy to Clipboard Toggle word wrap

Camel 2.11.1 以降から、Java 配列の長さフィールドのサポートも追加しました。

String[] lines = new String[]{"foo", "bar", "cat"};
exchange.getIn().setBody(lines);

simple("There are ${body.length} lines")
Copy to Clipboard Toggle word wrap

はい、以下に示すように、これを演算子サポートと組み合わせることができます。

simple("${body.address.zip} > 1000")
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat