74.4. オペレーターサポート
パーサは単一の演算子しかサポートしないように制限されている。
有効にするには、左の値を $\\{ } で囲む必要があります。構文は以下のようになります。
${leftValue} OP rightValue
rightValue には、' ' で囲まれた String リテラル、Null、定数値、${ }で 囲まれた他の式を指定することができる。
オペレーターの周囲にスペースがある こと。
Camel は rightValue 型を leftValue 型に自動的に型変換するので、例えば文字列を数値に変換して、数値の > 比較を行うことができます。
次の演算子がサポートされています。
| Operator | 説明 |
|---|---|
| == | 等しい |
| =~ | equals 大文字小文字を区別しない (文字列の比較時に大文字小文字を区別しない) |
| > | は次の値よりも大きい: |
| >= | より大きいか等しい |
| < | は次の値よりも小さい: |
| ⇐ | より小さいか等しい |
| != | 等しくない |
| !=~ | not equals 大文字小文字を無視する (文字列の比較時に大文字小文字を無視する) |
| contains | 文字列ベースの値に含まれているかどうかをテストするため |
| !contains | 文字列ベースの値に含まれないかどうかのテスト用 |
| ~~ | 文字列ベースの値で大文字と小文字の区別を無視して含むかどうかのテスト用 |
| !~~ | 文字列ベースの値で大文字小文字の区別を無視し、含まれない場合のテスト用 |
| regex | String 値として定義された指定された正規表現パターンに対するマッチング用 |
| !regex | String 値として定義された指定された正規表現パターンにマッチしない場合 |
| in | 値の集合に含まれる場合、各要素はコンマで区切られていなければならない。例えば、',,bronze,silver,gold' は、空の値と 3 つのメダルを含む 4 つの値のセットである。 |
| !in | 値の集合でない場合のマッチングでは、各要素をコンマで区切る必要があります。例えば、',,bronze,silver,gold' は、空の値と 3 つのメダルを含む 4 つの値のセットである。 |
| is | 左辺の型が値のインスタンスである場合のマッチング用。 |
| !is | 左辺の型が値のインスタンスでない場合のマッチング用。 |
| range |
左辺が数字で定義された範囲内にある場合のマッチングには、 |
| !range |
左辺が数字で定義された範囲内でない場合のマッチングには、 |
| startsWith | 左側の文字列が右側の文字列から始まるかどうかのテスト用。 |
| は次の値で始まる | startsWith 演算子と同じ。 |
| endsWith | 左側の文字列が右側の文字列で終わっているかどうかのテスト用。 |
| は次の値で終了する | endsWith 演算子と同じ。 |
また、以下の単項演算子を使用することができる。
| Operator | 説明 |
|---|---|
| ++ | 数字を 1 つずつ増やすこと。左辺は関数でなければならず、そうでない場合はリテラルとして解析される。 |
| — | 数値を 1 つ減らすこと。左辺は関数でなければならず、そうでない場合はリテラルとして解析される。 |
| \n | 改行文字を使用する場合。 |
| \t | タブ文字を使用する場合。 |
| \r | キャリッジリターン文字を使用する場合。 |
| \} | } 文字をテキストとして使用するには、以下を行います。これは、Simple 言語で JSon 構造を構築する際に必要になる場合があります。 |
また、以下の論理演算子を使用して、式をグループ化できます。
| Operator | 説明 |
|---|---|
| && | logical および 演算子は、2 つの式をグループ化するために使用されます。 |
| 論理または演算子は、2 つの式をグループ化するために使用されます。 |
AND の構文は次のとおりです。
${leftValue} OP rightValue && ${leftValue} OP rightValue
また、OR の構文は以下のようになります。
${leftValue} OP rightValue || ${leftValue} OP rightValue
例:
// exact equals match
simple("${header.foo} == 'foo'")
// ignore case when comparing, so if the header has value FOO this will match
simple("${header.foo} =~ 'foo'")
// here Camel will type convert '100' into the type of header.bar and if it is an Integer '100' will also be converter to an Integer
simple("${header.bar} == '100'")
simple("${header.bar} == 100")
// 100 will be converter to the type of header.bar so we can do > comparison
simple("${header.bar} > 100")
74.4.1. 異なるタイプと比較 リンクのコピーリンクがクリップボードにコピーされました!
String や int などの異なるタイプと比較する場合は、少し注意する必要があります。Camel は、左側の型を 1 優先度として使用します。両方の値がタイプに基づいて比較されない場合は、右側のタイプにフォールバックします。
これは、値を反転して、特定のタイプを適用することができることを意味します。上記のバーの値が文字列であるとします。次に、式を反転できます。
simple("100 < ${header.bar}")
これにより、int タイプが 1st の優先度として使用されます。
これは、Camel チームがバイナリー比較操作を改善し、数値型を String ベースに優先するようにすると、将来変更される可能性があります。これは、数値と比較する際に発生する String タイプで最もよくあります。
// testing for null
simple("${header.baz} == null")
// testing for not null
simple("${header.baz} != null")
さらに高度な例で、正しい値が別の式になります。
simple("${header.date} == ${date:now:yyyyMMdd}")
simple("${header.type} == ${bean:orderService?method=getOrderType}")
および例:タイトルに Camel という単語が含まれている場合のテスト。
simple("${header.title} contains 'Camel'")
および regex の例では、数字ヘッダーが 4 桁の値かどうかをテストします。
simple("${header.number} regex '\\d{4}'")
最後に、ヘッダーがリストの値のいずれかと等しい場合の例。各要素はコンマで区切り、空白は使用できません。
これは数字などでも機能します。Camel は各要素を左側のタイプに変換するためです。
simple("${header.type} in 'gold,silver'")
また、最後の 3 つの場合は、not を使用した negate テストもサポートしています。
simple("${header.type} !in 'gold,silver'")
また、タイプが特定のインスタンスであるかどうかをテストできます(例:String)。
simple("${header.type} is 'java.lang.String'")
すべての java.lang タイプの省略形が追加され、以下のように記述できるようになりました。
simple("${header.type} is 'String'")
範囲もサポートされています。範囲の間隔には数字が必要で、from と end の両方が含まれます。たとえば、値が 100 から 199 までのかどうかをテストするには、次のコマンドを実行します。
simple("${header.number} range 100..199")
スペースなしの範囲で .. を使用していることに注意してください。これは、Groovy と同じ構文に基づいています。
simple("${header.number} range '100..199'")
XML DSL にはすべての異なるビルダーメソッドを持つ Java DSL の機能がすべてあるため、単純な演算子でテストするために他の言語を使用する必要があります。これで、Simple 言語でこれを行うことができます。以下の例では、ヘッダーがウィジェットの注文であるかどうかをテストします。
<from uri="seda:orders">
<filter>
<simple>${header.type} == 'widget'</simple>
<to uri="bean:orderService?method=handleWidget"/>
</filter>
</from>