Chapter 31. SpEL
Chapter 31. 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: 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 31.1, "Adding the camel-spring dependency" . Example 31.1. Adding the camel-spring dependency Variables Table 31.1, "SpEL variables" lists the variables that are accessible when using SpEL. Table 31.1. SpEL variables Variable Type Description this Exchange The current exchange is the root object. exchange Exchange The current exchange. exchangeId String The current exchange's ID. exception Throwable The exchange exception (if any). fault Message The fault message (if any). request Message The exchange's In message. response Message The exchange's Out message (if any). properties Map The exchange properties. property( Name ) Object The exchange property keyed by Name . property( Name , Type ) Type The 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");
#{@headerUtils.count > 4} <!-- Maven POM File --> <properties> <camel-version>2.23.2.fuse-7_13_0-00013-redhat-00001</camel-version> </properties> <dependencies> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-spring</artifactId> <version>USD{camel-version}</version> </dependency> </dependencies> <route> <from uri="SourceURL"/> <filter> <spel>#{request.headers['Country'] == 'USA'}}</spel> <to uri="TargetURL"/> </filter> </route> from("SourceURL") .filter().spel("#{request.headers['Country'] == 'USA'}") .to("TargetURL"); from("SourceURL") .setBody(spel("Hello #{request.body}! What a beautiful #{request.headers['dayOrNight']}")) .to("TargetURL");