30.5. 述語
概要
等号の式をテストする述語を作成できます。たとえば、述語 simple("${header.timeOfDay} == '14:30'")
は、受信メッセージの timeOfDay
ヘッダーが 14:30
と等しいかどうかをテストします。
また、resultType
がブール値として指定される場合は常に、式は式ではなく述語として評価されます。これにより、これらの式に述語構文を使用することができます。
構文
また、Simple 述語を使用して、エクスチェンジのさまざまなパーツ (ヘッダー、メッセージボディーなど) をテストすることもできます。Simple 述語には、以下の一般的な構文があります。
${LHSVariable} Op RHSValue
ここで、左側の変数 LHSVariable は、表30.1「Simple 言語の変数」 で示される変数のいずれかであり、右側の値 RHSValue は、以下のいずれかになります。
-
別の変数
${
RHSVariable}
。 -
単一引用符
' '
で囲まれた文字列リテラル。 -
単一引用符
' '
で囲まれた数値定数。 -
Null オブジェクト
null
。
Simple 言語は、常に RHS 値を LHS 値の型に変換しようとします。
Simple 言語は、RHS の変換を試みますが、演算子によっては、比較を行う前に LHS を適切な型にキャストする必要があることがあります。
例
たとえば、以下のように simple 文字列比較と数値比較を実行できます。
simple("${in.header.user} == 'john'") simple("${in.header.number} > '100'") // String literal can be converted to integer
以下のように、左辺 (Left Hand Side) がコンマ区切りのリストメンバーであるかどうかをテストします。
simple("${in.header.type} in 'gold,silver'")
以下のように、左辺 (Left Hand Side) が正規表現に一致するかどうかをテストします。
simple("${in.header.number} regex '\d{4}'")
以下のように、is
演算子を使用して、左辺 (Left Hand Side) の型をテストすることができます。
simple("${in.header.type} is 'java.lang.String'") simple("${in.header.type} is 'String'") // You can abbreviate java.lang. types
以下のように、指定した数値の範囲 (範囲が範囲に含まれる) に左辺 (Left Hand Side) のものがあるかどうかをテストすることができます。
simple("${in.header.number} range '100..199'")
接続詞
また、論理接続 &&
および ||
を使用して述語を組み合わせることもできます。
たとえば、以下は、&&
接続詞 (論理積) を使用する式になります。
simple("${in.header.title} contains 'Camel' && ${in.header.type} == 'gold'")
そして、||
接続詞 (論理和) を使用した式がこちらです。
simple("${in.header.title} contains 'Camel' || ${in.header.type} == 'gold'")