282.5. Operator サポート
パーサーは、単一の Operator のみをサポートするよう制限されます。
これを有効にするには、左側の値を $\{ } で囲む必要があります。構文は以下のようになります。
${leftValue} OP rightValue
${leftValue} OP rightValue
rightValue
は、$\{ } で囲まれた ' '
, null
, a constant value、または別の式で囲まれた String リテラルになります。
演算子には、スペースを入れる 必要が あります。
Camel は rightValue の型を leftValue タイプに変換するため、空にできます。文字列を数値に変換すると > 数値の比較を使用できます。
以下の演算子がサポートされます。
Operator | 説明 |
---|---|
== | EQUALS |
=~ | Camel 2.16: 等号(文字列値を比較すると大文字と小文字が無視) |
> | は次の値よりも大きい: |
>= | より大きいか等しい |
< | は次の値よりも小さい: |
⇐ | より小さいか等しい |
!= | NOT EQUALS |
contains | 文字列ベースの値に含まれるかどうかのテスト |
not contains | 文字列ベースの値に含まれていないかどうかのテスト |
~~ | 文字列ベースの値の大文字と小文字を区別して含まれるかどうかをテストします。 |
regex | String 値として定義された特定の正規表現パターンに対するマッチング |
not regex | String 値として定義された指定の正規表現パターンと一致しない |
in | 値のセットで一致する場合は、各要素をコンマで区切る必要があります。空の値を含める場合は、二重カンマ(例: ',bronze,silver,gold)を使用して定義する必要があります。これは、空の値を持つ 4 つの値のセットであり、3 つのマイタルになります。 |
not in | 値のセットにない場合、各要素はコンマで区切る必要があります。空の値を含める場合は、二重カンマ(例: ',bronze,silver,gold)を使用して定義する必要があります。これは、空の値を持つ 4 つの値のセットであり、3 つのマイタルになります。 |
is | 左側のタイプが instanceof the value である場合にマッチングします。 |
not is | 左側のタイプが instanceof the value でない場合のマッチングの場合。 |
range |
左側が number: |
not range |
左側が number: |
は次の値で始まる | Camel 2.17.1、2.18: 左側の文字列が右側の文字列で始まるかどうかをテストするために使用します。 |
は次の値で終了する | Camel 2.17.1、2.18: 左側の文字列が右側の文字列で終わるかどうかをテストするために使用します。 |
さらに、以下の単項演算子を使用できます。
Operator | 説明 |
---|---|
++ | Camel 2.9: 数字を 1 つずつインクリメントします。左側は関数である必要があります。それ以外の場合は、リテラルとして解析されます。 |
— | Camel 2.9: 数値を 1 つ減らす。左側は関数である必要があります。それ以外の場合は、リテラルとして解析されます。 |
\ | Camel 2.9.3 から 2.10.x へ 値をエスケープするには、$ 記号を示す値(例: \$)をエスケープします。特殊: 改行の場合は \n、タブには \t、キャリッジリターンには \r を使用します。注記: File 言語 を使用したエスケープはサポートされて いません。注記 : Camel 2.11 以降ではエスケープ文字のサポートはなくなりましたが、以下の 3 つの特別なエスケープに置き換えられました。 |
\n | Camel 2.11: 改行文字を使用します。 |
\t | Camel 2.11: タブ文字を使用します。 |
\r | Camel 2.11: キャリッジリターン文字を使用します。 |
\} | Camel 2.18: } 文字をテキストとして使用するには、以下を行います。 |
また、次の論理演算子を使用して式をグループ化できます。
Operator | 説明 |
---|---|
および | 代わりに && を使用してください。論理 および 演算子 は、2 つの式をグループ化するために使用されます。 |
または | 非推奨 のため、代わりに || を使用してください。論理 or 演算子を使用して、2 つの式をグループ化します。 |
&& | Camel 2.9: 論理 および 演算子 を使用して 2 つの式をグループ化します。 |
|| | Camel 2.9: 論理 or 演算子を使用して、2 つの式をグループ化します。 |
Camel 2.4 以前 における Operator また
は Simple 言語式で 1 回 のみ使用 できます。Camel 2.5 以降では、これらの Operator を複数回使用できます。
AND の構文は以下のようになります。
${leftValue} OP rightValue and ${leftValue} OP rightValue
${leftValue} OP rightValue and ${leftValue} OP rightValue
OR の構文は以下のようになります。
${leftValue} OP rightValue or ${leftValue} OP rightValue
${leftValue} OP rightValue or ${leftValue} OP rightValue
例:
282.5.1. 異なるタイプの比較 リンクのコピーリンクがクリップボードにコピーされました!
String や int などの異なるタイプと比較する場合は、少し注意して行ってください。Camel は左側からの型を 1 最優先として使用します。また、両方の値がそのタイプに基づいて比較できない場合には、右側のサイドタイプにフォールバックします。
これは、値を調整して特定のタイプを適用することができます。上記のバー値が String であるとします。次に、式を調節できます。
simple("100 < ${in.header.bar}")
simple("100 < ${in.header.bar}")
これにより、int タイプが最優先で使用されるようになります。
Camel チームがバイナリー比較操作を改善し、String ベースよりも数値型を優先すると、将来的に変更される可能性があります。これはほとんどの場合、String タイプで、数字を比較する際に問題が発生します。
// testing for null simple("${in.header.baz} == null") // testing for not null simple("${in.header.baz} != null")
// testing for null
simple("${in.header.baz} == null")
// testing for not null
simple("${in.header.baz} != null")
正しい値が別の式であるもう少し高度な例
simple("${in.header.date} == ${date:now:yyyyMMdd}") simple("${in.header.type} == ${bean:orderService?method=getOrderType}")
simple("${in.header.date} == ${date:now:yyyyMMdd}")
simple("${in.header.type} == ${bean:orderService?method=getOrderType}")
そしてサンプルには、タイトルに Camel という単語が含まれる場合のテスト
simple("${in.header.title} contains 'Camel'")
simple("${in.header.title} contains 'Camel'")
また、正規表現の例で、数字のヘッダーが 4 桁の値であるかどうかをテストします。
simple("${in.header.number} regex '\\d{4}'")
simple("${in.header.number} regex '\\d{4}'")
最後に、ヘッダーがリストの値のいずれかと等しい場合の例。各要素はコンマで区切り、スペースを入れないでください。
これは数字で機能します。Camel は各要素を左側の型に変換します。
simple("${in.header.type} in 'gold,silver'")
simple("${in.header.type} in 'gold,silver'")
最後の 3 では、否定テストもサポートしていません。
simple("${in.header.type} not in 'gold,silver'")
simple("${in.header.type} not in 'gold,silver'")
また、タイプが特定のインスタンスであるかどうか(例: String)をテストすることができます。
simple("${in.header.type} is 'java.lang.String'")
simple("${in.header.type} is 'java.lang.String'")
以下のように記述できるように、すべての java.lang
タイプに短縮名を追加しました。
simple("${in.header.type} is 'String'")
simple("${in.header.type} is 'String'")
範囲もサポートされます。範囲の間隔は、数値と終了の両方が含まれます。たとえば、値が 100 から 199 の間であるかどうかをテストするには、以下を実行します。
simple("${in.header.number} range 100..199")
simple("${in.header.number} range 100..199")
範囲にスペースなしの ..
を使用することに注意してください。これは Groovy と同じ構文に基づいています。
Camel 2.9 以降では、範囲の値は一重引用符である必要があります。
simple("${in.header.number} range '100..199'")
simple("${in.header.number} range '100..199'")