Bean bindingThe binding of a Camel Message to a bean method call can occur in different ways
By default the return value is set on the outbound message body. For example you could write a method like this public class Foo { @MessageDriven(uri = "activemq:my.queue") public void doSomething(String body) { // process the inbound message here } } Here Camel with subscribe to an ActiveMQ queue, then convert the message payload to a String (so dealing with TextMessage, ObjectMessage and BytesMessage in JMS), then process this method. Using Annotations to bind parameters to the ExchangeYou can also use the following annotations to bind parameters to different kinds of Expression
For example public class Foo { @MessageDriven(uri = "activemq:my.queue") public void doSomething(@Header('JMSCorrelationID') String correlationID, @Body String body) { // process the inbound message here } } In the above you can now pass the Message.getJMSCorrelationID() as a parameter to the method (using the Type Converter to adapt the value to the type of the parameter). Finally you don't need the @MessageDriven annotation; as the Camel route could describe which method to invoke. e.g. a route could look like from("activemq:someQueue"). to("bean:myBean"); Here myBean would be looked up in the Registry (such as JNDI or the Spring ApplicationContext), then the body of the message would be used to try figure out what method to call. If you want to be explicit you can use from("activemq:someQueue"). to("bean:myBean?methodName=doSomething"); Using Expression LanguagesYou can also use any of the Languages supported in Camel to bind expressions to method parameters when using bean integration. For example you can use any of these annotations...
For example public class Foo { @MessageDriven(uri = "activemq:my.queue") public void doSomething(@Path("/foo/bar/text()") String correlationID, @Body String body) { // process the inbound message here } } |