You can construct predicates by testing expressions for equality. For example, the
predicate, simple("${header.timeOfDay} == '14:30'"), tests
whether the timeOfDay header in the incoming message is equal to
14:30.
You can also test various parts of an exchange (headers, message body, and so on) using simple predicates. Simple predicates have the following general syntax:
${LHSVariable} Op RHSValueWhere the variable on the left hand side, LHSVariable,
is one of the variables shown in Table 17.1 and the value
on the right hand side, RHSValue, is one of the
following:
Another variable,
${RHSVariable}.A string literal, enclosed in single quotes,
' '.A string literal, not enclosed in quotes (no spaces allowed).
A numeric constant.
The null object,
null.
The simple language always attempts to convert the RHS value to the type of the LHS value.
For example, you can perform simple string comparisons and numerical comparisons as follows:
simple("${in.header.user} == 'john'")
simple("${in.header.user} == john") // Quotes are optional here
simple("${in.header.number} > 100")
simple("${in.header.number} > '100'") // String literal can be converted to integerYou can test whether the left hand side is a member of a comma-separated list, as follows:
simple("${in.header.type} in 'gold,silver'")You can test whether the left hand side matches a regular expression, as follows:
simple("${in.header.number} regex '\d{4}'")You can test the type of the left hand side using the is operator, as
follows:
simple("${in.header.type} is 'java.lang.String'")
simple("${in.header.type} is String") // You can abbreviate java.lang. typesYou can test whether the left hand side lies in a specified numerical range (where the range is inclusive), as follows:
simple("${in.header.number} range 100..199")You can also combine predicates using the logical conjunctions, and
and or.
For example, here is an expression using the and conjunction:
simple("${in.header.title} contains 'Camel' and ${in.header.type} == 'gold'")And here is an expression using the or conjunction:
simple("${in.header.title} contains 'Camel' or ${in.header.type} == 'gold'")







