第31章 SpEL
概要
Spring Expression Language (SpEL) は、Spring 3 で提供される Object Graph Navigation 言語で、ルートの述語および式を作成するために使用できます。SpEL の注目すべき機能は、レジストリーから Bean に簡単にアクセスできる機能です。
構文
SpEL 式はプレースホルダー構文 #{SpelExpression}
を使用する必要があります。これにより、プレーンテキストの文字列に組み込むことができます (つまり、SpEL では Expression templating が有効になっています)。
SpEL は @BeanID
構文を使用してレジストリー (通常は Spring レジストリー) で Bean を検索することもできます。たとえば、ID の Bean headerUtils
およびメソッド count()
(現在のメッセージのヘッダーの数をカウント) の場合、以下のように SpEL 述語で headerUtils
Bean を使用できます。
#{@headerUtils.count > 4}
SpEL パッケージの追加
ルートで SpEL を使用するには、例31.1「camel-spring 依存関係の追加」 に示したように、camel-spring
への依存関係をプロジェクトに追加する必要があります。
例31.1 camel-spring 依存関係の追加
<!-- Maven POM File --> <properties> <camel-version>2.23.2.fuse-790054-redhat-00001</camel-version> ... </properties> <dependencies> ... <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-spring</artifactId> <version>${camel-version}</version> </dependency> ... </dependencies>
変数
表31.1「SpEL 変数」 に、SpEL を使用する際にアクセス可能な組み込み変数の一覧を示します。
変数 | 型 | 説明 |
---|---|---|
|
| 現在のエクスチェンジはルートオブジェクトです。 |
|
| 現在のエクスチェンジ |
|
| 現在のエクスチェンジ ID |
|
| エクスチェンジの例外 (ある場合) |
|
| Fault メッセージ (ある場合) |
|
| エクスチェンジの In メッセージ。 |
|
| エクスチェンジの Out メッセージ (ある場合)。 |
|
| エクスチェンジプロパティー |
|
| Name で指定されたエクスチェンジプロパティー。 |
|
| Type に変換された Name で指定されたエクスチェンジプロパティー。 |
XML の例
たとえば、Country
ヘッダーに USA
があるメッセージのみを選択するには、以下の SpEL 式を使用できます。
<route> <from uri="SourceURL"/> <filter> <spel>#{request.headers['Country'] == 'USA'}}</spel> <to uri="TargetURL"/> </filter> </route>
Java の例
以下のように、Java DSL で同じルートを定義できます。
from("SourceURL") .filter().spel("#{request.headers['Country'] == 'USA'}") .to("TargetURL");
以下の例は、プレーンテキストの文字列内に SpEL 式を埋め込む方法を示しています。
from("SourceURL") .setBody(spel("Hello #{request.body}! What a beautiful #{request.headers['dayOrNight']}")) .to("TargetURL");