第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.21.0.fuse-760027-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 を使用する際にアクセス可能な変数の一覧を示します。
表31.1 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");