Chapter 30. SpEL


Overview

The Spring Expression Language (SpEL) is an object graph navigation language provided with Spring 3, which can be used to construct predicates and expressions in a route. A notable feature of SpEL is the ease with which you can access beans from the registry.

Syntax

The SpEL expressions must use the placeholder syntax, #{SpelExpression}, so that they can be embedded in a plain text string (in other words, SpEL has expression templating enabled).
SpEL can also look up beans in the registry (typically, the Spring registry), using the @BeanID syntax. For example, given a bean with the ID, headerUtils, and the method, count() (which counts the number of headers on the current message), you could use the headerUtils bean in an SpEL predicate, as follows:
#{@headerUtils.count > 4}

Adding SpEL package

To use SpEL in your routes you need to add a dependency on camel-spring to your project as shown in Example 30.1, “Adding the camel-spring dependency”.

Example 30.1. Adding the camel-spring dependency

<!-- Maven POM File -->
<properties>
  <camel-version>2.15.1.redhat-620133</camel-version>
  ...
</properties>

<dependencies>
  ...
  <dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-spring</artifactId>
    <version>${camel-version}</version>
  </dependency>
  ...
</dependencies>

Variables

Table 30.1, “SpEL variables” lists the variables that are accessible when using SpEL.
Table 30.1. SpEL variables
VariableTypeDescription
thisExchangeThe current exchange is the root object.
exchangeExchangeThe current exchange.
exchangeIdStringThe current exchange's ID.
exceptionThrowableThe exchange exception (if any).
faultMessageThe fault message (if any).
requestMessageThe exchange's In message.
responseMessageThe exchange's Out message (if any).
propertiesMapThe exchange properties.
property(Name)ObjectThe exchange property keyed by Name.
property(Name, Type)TypeThe exchange property keyed by Name, converted to the type, Type.

XML example

For example, to select only those messages whose Country header has the value USA, you can use the following SpEL expression:
<route>
  <from uri="SourceURL"/>
  <filter>
    <spel>#{request.headers['Country'] == 'USA'}}</spel>
    <to uri="TargetURL"/>
  </filter>
</route>

Java example

You can define the same route in the Java DSL, as follows:
from("SourceURL")
  .filter().spel("#{request.headers['Country'] == 'USA'}")
  .to("TargetURL");
The following example shows how to embed SpEL expressions within a plain text string:
from("SourceURL")
  .setBody(spel("Hello #{request.body}! What a beautiful #{request.headers['dayOrNight']}"))
  .to("TargetURL");
Red Hat logoGithubRedditYoutubeTwitter

Learn

Try, buy, & sell

Communities

About Red Hat Documentation

We help Red Hat users innovate and achieve their goals with our products and services with content they can trust.

Making open source more inclusive

Red Hat is committed to replacing problematic language in our code, documentation, and web properties. For more details, see the Red Hat Blog.

About Red Hat

We deliver hardened solutions that make it easier for enterprises to work across platforms and environments, from the core datacenter to the network edge.

© 2024 Red Hat, Inc.