316.3. サンプル
316.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" となります。
316.3.2. Bean インテグレーション
SpEL 式で、レジストリー (ほとんどの場合 ApplicationContext
) で定義された Bean を参照できます。たとえば、ApplicationContext
に "foo" という名前の Bean がある場合、次のようにこの Bean で "bar" メソッドを呼び出すことができます。
#{@foo.bar == 'xyz'}
316.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");