282.4. OGNL 式のサポート
Camel 2.3 の時点で利用可能
INFO:Camel の OGNL サポート はメソッドのみを呼び出すためのものです。フィールドにアクセスできません。Camel 2.11.1 以降では、Java 配列の length フィールドにアクセスするための特別なサポートを追加しました。
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 はゲッターの短縮名を認識しますが、以下のような実際の名前を呼び出すか、または任意の名前を使用することができます。
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
が key として値を検索し、その値で 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}")
List
タイプにアクセスすることもできます。たとえば、以下のようなアドレスから行を取得することもできます。
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 アレイの length フィールドも追加しました。以下に例を示します。
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")
はい、これを以下のように Operator サポートと組み合わせることができます。
simple("${body.address.zip} > 1000")
simple("${body.address.zip} > 1000")