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