Predicates
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 true or false . This makes Predicate so powerful as it is often used to control the routing of message in which path they should be routed. A simple example is to route an Exchange based on a header value: from("jms:queue:order" ) In the route above the Predicate is the header("type").isEqualTo("widget") as its constructed as an Expression that is evaluated as a Predicate . To do this the various Builder classes helps us here to create a nice and fluent syntax. isEqualTo is a builder method that returns a Predicate based on the input. 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" ) Negating a PredicateYou can use the not method on the PredicateBuilder to negate a predicate. 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: from("direct:start" ) Compound PredicatesYou can also create compound predicates using boolean operators such as and,or,not and many others. // We define 3 predicates based on some user roles 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.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |