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
RHSValue
Where 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 integer
You 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. types
You 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'")