...
Using Bean Expressions from the Java DSL
Code Block |
|
from("activemq:topic:OrdersTopic").
filter().method("myBean", "isGoldCustomer").
to("activemq:BigSpendersQueue");
|
Using Bean Expressions from XML
Code Block |
|
<route>
<from uri="activemq:topic:OrdersTopic"/>
<filter>
<method ref="myBean" method="isGoldCustomer"/>
<to uri="activemq:BigSpendersQueue"/>
</filter>
</route>
|
...
So we could implement it like this...
Code Block |
|
public class MyBean {
public boolean isGoldCustomer(Exchange exchange) {
...
}
}
|
We can also use the Bean Integration annotations. For example you could do...
Code Block |
|
public boolean isGoldCustomer(String body) {...}
|
or
Code Block |
|
public boolean isGoldCustomer(@Header(name = "foo") Integer fooHeader) {...}
|
...
Camel can instantiate the bean and invoke the method if given a class or invoke an already existing instance. This is illustrated from the example below:
Code Block |
|
from("activemq:topic:OrdersTopic").
filter()._expression_(BeanLanguage(MyBean.class, "isGoldCustomer")).
to("activemq:BigSpendersQueue");
|
The 2nd parameter isGoldCustomer
is an optional parameter to explicit set the method name to invoke. If not provided Camel will try to invoke the best suited method. If case of ambiguity Camel will thrown an Exception. In these situations the 2nd parameter can solve this problem. Also the code is more readable if the method name is provided. The 1st parameter can also be an existing instance of a Bean such as:
Code Block |
|
private MyBean my;
from("activemq:topic:OrdersTopic").
filter()._expression_(BeanLanguage.bean(my, "isGoldCustomer")).
to("activemq:BigSpendersQueue");
|
In Camel 2.2 onwards you can avoid the BeanLanguage
and have it just as:
Code Block |
|
private MyBean my;
from("activemq:topic:OrdersTopic").
filter()._expression_(bean(my, "isGoldCustomer")).
to("activemq:BigSpendersQueue");
|
Which also can be done in a bit shorter and nice way:
Code Block |
|
private MyBean my;
from("activemq:topic:OrdersTopic").
filter().method(my, "isGoldCustomer").
to("activemq:BigSpendersQueue");
|
...