304.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}")

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

simple("${body.address}")
simple("${body.getAddress.getStreet}")
simple("${body.address.getZip}")
simple("${body.doSomething}")

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

simple("${body?.address?.street}")

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

simple("${body[foo].name}")

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

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

simple("${body['foo bar'].name}")

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

simple("${body[foo]}")
simple("${body[this.is.foo]}")

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

simple("${body[foo]?.name}")

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

simple("${body.address.lines[0]}")
simple("${body.address.lines[1]}")
simple("${body.address.lines[2]}")

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

simple("${body.address.lines[last]}")

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

simple("${body.address.lines[last-1]}")

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

simple("${body.address.lines[last-2]}")

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

simple("${body.address.lines.size}")

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

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

simple("There are ${body.length} lines")

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

simple("${body.address.zip} > 1000")