第303章 Simple 言語
Camel バージョン 1.1 以降で利用可能
Simple Expression Language は、作成されたときは非常に単純な言語でしたが、その後、より強力になりました。これは主に、新しい依存関係や XPath の知識を必要とせずに、式と述語を評価するための非常に小さくて単純な言語であることを目的としています。そのため、camel-core でのテストに最適です。アイデアは、Camel ルートで式ベースのスクリプトが少し必要な場合に、一般的なユースケースの 95% をカバーすることでした。
ただし、より複雑なユースケースでは、一般に、次のようなより表現力のある強力な言語を選択することをお勧めします。
単純な言語は、式に定数リテラルが含まれる複雑な式に ${body
} プレースホルダーを使用します。式がトークン自体のみの場合、$\{ } プレースホルダーは省略できます。
代替構文 Camel 2.5 以降では、プレースホルダーとして $simple{ }
を使用する代替構文を使用することもできます。これは、たとえば Spring プロパティーのプレースホルダーを Camel と一緒に使用する場合の競合を回避するために使用できます。
303.1. Camel 2.9 以降の Simple 言語の変更
Simple 言語は Camel 2.9 以降で改善され、正確なエラーメッセージのインデックスを作成できる、より優れた構文パーサーを使用するようになりました。たとえば、演算子の 1 つに入力ミスがあると、以前はパーサーがこれを検出できず、評価が true になりました。下位互換性がなくなった構文にいくつかの変更があります。Simple 言語を述語として使用する場合、リテラルテキストを一重引用符または二重引用符で囲む 必要があります。例: "${body} == 'Camel'"
.リテラルを一重引用符で囲んでいることに注意してください。"body"
と "header.foo"
を使用してメッセージの本文とヘッダーを参照する古いスタイルは @deprecated であり、組み込み関数には常に $\{ } トークンを使用することをお勧めします。範囲演算子では、${header.zip} between '30000..39999'
のように、範囲を一重引用符で囲む必要があります。
in メッセージの本文を取得するには: "body"
、または "in.body"
または "${body}"
。
複雑な式では、"Hello ${in.header.name} how are you?"
のように $\{ } プレースホルダーを使用する必要があります。.
同じ式に複数の関数を含めることができます: "Hello ${in.header.name} this is ${in.header.me} speaking"
.
ただし、Camel 2.8.x 以前では関数をネストでき ません (つまり、既存のプレースホルダーに別の $\{ } プレースホルダーを含めることはできません)。
Camel 2.9 以降では、関数をネストできます。