109.5. 演算子サポート


パーサーは、単一の演算子のみをサポートするように制限されています。

有効にするには、左の値を $\\{ } で囲む必要があります。構文は以下のようになります。

${leftValue} OP rightValue
Copy to Clipboard Toggle word wrap

rightValue は、' ' で囲まれた文字列リテラル、null、定数値、または $\{ } で囲まれた別の式に指定できます。

注記

演算子の前後にはスペースが 必要 です。

Camel は rightValue 型を leftValue 型に自動的に型変換します。文字列を数値に変換して、数値に対して > 比較を使用できるようにします。

次の演算子がサポートされています。

Expand
Operator説明

==

等しい

=~

equals は大文字と小文字を区別しません (文字列値を比較するときは大文字と小文字を区別しません)

>

は次の値よりも大きい:

>=

より大きいか等しい

<

は次の値よりも小さい:

より小さいか等しい

!=

等しくない

!=~

等しくない場合は大文字と小文字を区別しません (文字列値を比較するときに大文字と小文字を区別しません)

contains

文字列ベースの値に含まれているかどうかをテストします

!contains

文字列ベースの値に含まれていないかどうかをテストします

~~

文字列ベースの値で大文字と小文字の区別を無視して含まれているかどうかをテストします

!~~

文字列ベースの値で大文字と小文字の区別を無視して含まれていないかどうかをテストします

regex

文字列値として定義された特定の正規表現パターンと照合するため

!regex

文字列値として定義された特定の正規表現パターンと一致しない場合

in

一連の値があり、各要素をコンマで区切る必要がある場合に照合するため空の値を含める場合は 2 つのコンマを使用して定義する必要があります。たとえば、',,bronze,silver,gold' のように、空の値と 3 つのメダルを含めた 4 つの値のセットです。

!in

値がセットでなく、各要素をコンマで区切る必要がある場合に照合するため。空の値を含める場合は 2 つのコンマを使用して定義する必要があります。たとえば、',,bronze,silver,gold' のように、空の値と 3 つのメダルを含めた 4 つの値のセットです。

is

左側の型が値のインスタンスである場合に照合するため。

!is

左側の型が値のインスタンスでない場合に照合するため。

range

左辺が数値として定義された値の範囲内にある場合に照合するため (from..to ..)。

!range

左辺が数値として定義された値の範囲内にない場合に照合するため (from..to ..)。

startsWith

左辺の文字列が右辺の文字列で開始するかどうかをテストします

starts with

startsWith 演算子と同じです。

endsWith

左辺の文字列が右辺の文字列で終了するかどうかをテストします

ends with

endWith 演算子と同じです。

また、次の単項演算子を使用できます。

Expand
演算子説明

++

数値を 1 ずつ増やします。左辺は関数でなければならず、それ以外の場合はリテラルとして解析されます。

 — 

数値を 1 つ減らします。左辺は関数でなければならず、それ以外の場合はリテラルとして解析されます。

\n

改行文字を使用します。

\t

タブ文字を使用します。

\r

キャリッジリターン文字を使用します。

\}

} 文字をテキストとして使用します。これは、Simple 言語で JSON 構造を構築するときに必要になる場合があります。

また、次の論理演算子を使用して式をグループ化できます。

Expand
演算子説明

&&

and 論理演算子は、2 つの式のグループ化に使用されます。

  
 

or 論理演算子は、2 つの式のグループ化に使用されます。

AND の構文は次のとおりです。

${leftValue} OP rightValue && ${leftValue} OP rightValue
Copy to Clipboard Toggle word wrap

OR の構文は次のとおりです。

${leftValue} OP rightValue || ${leftValue} OP rightValue
Copy to Clipboard Toggle word wrap

例:

// 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")
Copy to Clipboard Toggle word wrap

109.5.1. さまざまなタイプとの比較

String や int などの異なる型と比較する場合は、少し注意が必要です。Camel は左辺のタイプを最優先して使用します。右辺の型に基づいて両方の値を比較できなかった場合は、右辺の型にフォールバックします。
これは、値を反転して特定のタイプを適用できることを意味します。上記のバーの値が文字列であるとします。次に、方程式を反転できます。

simple("100 < ${header.bar}")
Copy to Clipboard Toggle word wrap

これにより、int 型が最優先で使用されます。

これは、Camel チームがバイナリー比較演算を改善して、文字列ベースよりも数値型を優先する場合に、今後変更される可能性があります。数値と比較するときに問題を引き起こすのは、ほとんどの場合 String 型です。

// testing for null
simple("${header.baz} == null")

// testing for not null
simple("${header.baz} != null")
Copy to Clipboard Toggle word wrap

また、正しい値が別の式である場合の、もう少し高度な例

simple("${header.date} == ${date:now:yyyyMMdd}")

simple("${header.type} == ${bean:orderService?method=getOrderType}")
Copy to Clipboard Toggle word wrap

contains が含まれる例。タイトルに Camel という用語が含まれるかをテストします。

simple("${header.title} contains 'Camel'")
Copy to Clipboard Toggle word wrap

正規表現が含まれる例。数のヘッダーが 4 桁の値かどうかをテストします。

simple("${header.number} regex '\\d{4}'")
Copy to Clipboard Toggle word wrap

最後に、ヘッダーがリスト内のいずれかの値と等しい場合の例を示します。各要素はコンマで区切る必要があり、前後にスペースを入れないでください。
Camel は各要素を左辺の型に変換するため、これは数値などにも機能します。

simple("${header.type} in 'gold,silver'")
Copy to Clipboard Toggle word wrap

また、最後の 3 つについては、not を使用した否定テストもサポートしています。

simple("${header.type} !in 'gold,silver'")
Copy to Clipboard Toggle word wrap

そして、文字列など、タイプが特定のインスタンスであるかどうかをテストできます。

simple("${header.type} is 'java.lang.String'")
Copy to Clipboard Toggle word wrap

次のように記述できるように、すべての java.lang タイプの短縮形を追加しました。

simple("${header.type} is 'String'")
Copy to Clipboard Toggle word wrap

範囲もサポートされています。範囲間隔には数字が必要で、最初と最後の両方の値が含まれます。たとえば、値が 100 から 199 の間であるかどうかをテストするには、次のようにします。

simple("${header.number} range 100..199")
Copy to Clipboard Toggle word wrap

スペースなしの範囲で .. を使用していることに注意してください。Groovy と同じ構文に基づいています。

simple("${header.number} range '100..199'")
Copy to Clipboard Toggle word wrap

XML DSL は、さまざまなビルダーメソッドをすべて備えた Java DSL ほど強力ではないため、単純な演算子でテストするには、他の言語を使用する必要があります。これで、Simple 言語でこれを行うことができます。以下のサンプルでは、ヘッダーがウィジェットの注文かどうかをテストします。

<from uri="seda:orders">
   <filter>
       <simple>${header.type} == 'widget'</simple>
       <to uri="bean:orderService?method=handleWidget"/>
   </filter>
</from>
Copy to Clipboard Toggle word wrap

109.5.2. And/Or の使用

式が 2 つある場合は、&& または || 演算子で結合できます。

たとえば、以下のようになります。

simple("${header.title} contains 'Camel' && ${header.type'} == 'gold'")
Copy to Clipboard Toggle word wrap

そしてもちろん || もサポートされています。サンプルは次のようになります。

simple("${header.title} contains 'Camel' || ${header.type'} == 'gold'")
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat