315.3. サンプル
315.3.1. 式テンプレート
式のテンプレート化が有効になっているため、SpEL 式は #{ } 区切り記号で囲む必要があります。これにより、SpEL 式を通常のテキストと組み合わせて、これを非常に軽量なテンプレート言語として使用できます。
たとえば、次のルートを構築するとします。
from("direct:example")
.setBody(spel("Hello #{request.body}! What a beautiful #{request.headers['dayOrNight']}"))
.to("mock:result");
上記のルートで、spel は org.apache.camel.language.spel.SpelExpression.spel からインポートする必要がある静的メソッドであることに注意してください。これは、setBody メソッドにパラメーターとして渡される Expression として spel を使用するためです。fluent API を使用する場合は、代わりにこれを行うことができます。
from("direct:example")
.setBody().spel("Hello #{request.body}! What a beautiful #{request.headers['dayOrNight']}")
.to("mock:result");
setBody() メソッドの spel メソッドを使用していることに注意してください。そして、これは org.apache.camel.language.spel.SpelExpression.spel から spel メソッドを静的にインポートする必要はありません。
そして、本文に文字列 World、ヘッダー dayOrNight、値 day を含むメッセージを送信しました。
template.sendBodyAndHeader("direct:example", "World", "dayOrNight", "day");
mock:result の出力は、"Hello World!What a beautiful day" となります。
315.3.2. Bean インテグレーション
SpEL 式で、レジストリー (ほとんどの場合 ApplicationContext) で定義された Bean を参照できます。たとえば、ApplicationContext に foo という名前の Bean がある場合、次のようにこの Bean で bar メソッドを呼び出すことができます。
#{@foo.bar == 'xyz'}315.3.3. エンタープライズ統合パターンでの SpEL
Recipient List の式として、または Message Filter 内の述語として SpEL を使用できます。
<route>
<from uri="direct:foo"/>
<filter>
<spel>#{request.headers['foo'] == 'bar'}</spel>
<to uri="direct:bar"/>
</filter>
</route>そして、Java DSL で同等のもの:
from("direct:foo")
.filter().spel("#{request.headers['foo'] == 'bar'}")
.to("direct:bar");