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