Since we're on a major migration process of this website, some component documents here are out of sync right now. In the meantime you may want to look at the early version of the new website
https://camel.apache.org/staging/
We would very much like to receive any feedback on the new site, please join the discussion on the Camel user mailing list.
PredicatesCamel supports a pluggable interface called Predicate which can be used to integrate a dynamic predicate into Enterprise Integration Patterns such as when using the Message Filter or Content Based Router. A Predicate is being evaluated to a boolean value so the result is either A simple example is to route an Exchange based on a header value: from("jms:queue:order") .choice() .when(header("type").isEqualTo("widget")).to("bean:widgetOrder") .when(header("type").isEqualTo("wombat")).to("bean:wombatOrder") .otherwise() .to("bean:miscOrder") .end(); In the route above the Predicate is the Sometimes the fluent builders can get long and a bit complex to read, then you can just define your predicate outside the route and then just refer to the predicate in the route: Predicate isWidget = header("type").isEqualTo("widget"); And then you can refer to it in the route as: from("jms:queue:order") .choice() .when(isWidget).to("bean:widgetOrder") .when(isWombat).to("bean:wombatOrder") .otherwise() .to("bean:miscOrder") .end(); Negating a PredicateYou can use the not method on the First we import the not static, so it makes our route nice and easy to read: import static org.apache.camel.builder.PredicateBuilder.not And then we can use it to enclose an existing predicate and negate it as the example shows: Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20
Compound PredicatesYou can also create compound predicates using boolean operators such as Currently this feature is only available in the Java-based DSLs, but not in the Spring nor Blueprint DSLs. Using the
Additionally, with Combining different Expression Languages is also possible, e.g.: PredicateBuilder.and(XPathBuilder.xpath("/bookings/flights"), simple("${property.country = 'Spain'}")) The sample below demonstrates further use cases: Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20
Extensible PredicatesCamel supports extensible Predicates using multiple Languages; the following languages are supported out of the box
Most of these languages is also supported used as Annotation Based Expression Language. You can easily write your own plugin predicate by implementing the Predicate interface. There are also a number of helper builders available such as the PredicateBuilder class Using Predicates in your IDETo use different expression and predicates in your IDE you need to perform a static import of the builder class for the language(s) you wish to use.
See Also |