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}")
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}")
simple("${body.address}")
simple("${body.getAddress.getStreet}")
simple("${body.address.getZip}")
simple("${body.doSomething}")
たとえば、本文にアドレスがない場合は、Null セーフ演算子 (?.) を使用して NPE を回避することもできます。
simple("${body?.address?.street}")
simple("${body?.address?.street}")
Map または List タイプでインデックスを作成することもできるため、次のことができます。
simple("${body[foo].name}")
simple("${body[foo].name}")
本文が Map ベースであると想定し、foo をキーとして値を検索し、その値に対して getName メソッドを呼び出します。
キーにスペースがある場合は、'foo bar' のようにキーを引用符で囲む 必要 があります。
simple("${body['foo bar'].name}")
simple("${body['foo bar'].name}")
キー名 (ドットありまたはドットなし) を使用して、Map オブジェクトまたは List オブジェクトに直接アクセスできます。
simple("${body[foo]}")
simple("${body[this.is.foo]}")
simple("${body[foo]}")
simple("${body[this.is.foo]}")
キー foo に値がないと仮定すると、null セーフ演算子を使用して、次のように NPE を回避できます。
simple("${body[foo]?.name}")
simple("${body[foo]?.name}")
リスト 型にアクセスすることもできます。たとえば、次のようにしてアドレスから行を取得できます。
simple("${body.address.lines[0]}")
simple("${body.address.lines[1]}")
simple("${body.address.lines[2]}")
simple("${body.address.lines[0]}")
simple("${body.address.lines[1]}")
simple("${body.address.lines[2]}")
リストから最後の値を取得するために使用できる特別な last キーワードがあります。
simple("${body.address.lines[last]}")
simple("${body.address.lines[last]}")
最後から 2 番目の値を取得するには、数値を除算できるので、last-1 を使用してこれを指定できます。
simple("${body.address.lines[last-1]}")
simple("${body.address.lines[last-1]}")
また、最後の 3 番目も当然、以下のようになります。
simple("${body.address.lines[last-2]}")
simple("${body.address.lines[last-2]}")
そして、リストの size メソッドを呼び出すことができます
simple("${body.address.lines.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")
String[] lines = new String[]{"foo", "bar", "cat"};
exchange.getIn().setBody(lines);
simple("There are ${body.length} lines")
はい、以下に示すように、これを演算子サポートと組み合わせることができます。
simple("${body.address.zip} > 1000")
simple("${body.address.zip} > 1000")