...
By default the return value is set on the outbound message body.
For example a POJO such as:
Code Block |
---|
public class Bar { public String doSomething(String body) { // process the in body and return whatever you want return "Bye World"; } |
...
For example you could write a method like this (showing also a feature in Camel, the @MessageDrive @MessageDriven
annotation):
Info | ||
---|---|---|
| ||
Using the |
Code Block |
---|
public class Foo { @MessageDriven(uri = "activemq:my.queue") public void doSomething(String body) { // process the inbound message here } } |
...
Using Annotations to bind parameters to the Exchange
Info | ||
---|---|---|
| ||
The annotations below is part of camel-core and its Bean component and thus does not require camel-spring. These annotations is to be used with the Bean component. |
The annotations can be used to bind in situations where traditional methods would result in ambiguous methods. So by adding annotations you can decorate your bean to help Camel invoke the correct method.
...
Annotation | Meaning |
---|---|
To bind to an inbound message body | |
To bind to an inbound message header | |
To bind to the Map of the inbound message headers | |
To bind to the Map of the outbound message headers | |
To bind to a named property on the exchange | |
To bind to the property map on the exchange |
For example:
Code Block |
---|
public class Foo { @MessageDriven(uri = "activemq:my.queue") public void doSomething(@Header('JMSCorrelationID') String correlationID, @Body String body) { // process the inbound message here } } |
...
You 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...:
Annotation | Description |
---|---|
Inject a Bean expression | |
Inject a BeanShell expression | |
Inject a Constant expression | |
Inject an EL expression | |
Inject a Groovy expression | |
Inject a Header expression | |
Inject a JavaScript expression | |
Inject an OGNL expression | |
Inject a PHP expression | |
Inject a Python expression | |
Inject a Ruby expression | |
Inject an Simple expression | |
Inject an XPath expression | |
Inject an XQuery expression |
For example:
Code Block |
---|
public class Foo { @MessageDriven(uri = "activemq:my.queue") public void doSomething(@Path@XPath("/foo/bar/text()") String correlationID, @Body String body) { // process the inbound message here } } |
Advanced example using @Bean
And an example of using the the @Bean binding annotation, where you can use a POJO where you can do whatever java code you like:
Code Block |
---|
public class Foo { @MessageDriven(uri = "activemq:my.queue") public void doSomething(@Bean("myCorrelationIdGenerator") String correlationID, @Body String body) { // process the inbound message here } } |
And then we can have a spring bean with the id myCorrelationIdGenerator where we can compute the id.
Code Block | ||||
---|---|---|---|---|
| ||||
public class MyIdGenerator { private UserManager userManager; public String generate(@Header( name = "user" ) String user, @Body String payload) throws Exception { User user = iserManager.lookupUser(user); String userId = user.getPrimaryId(); String id = userId + generateHashCodeForPayload(payload); return id; } } |
The POJO MyIdGenerator has one public method that accepts two parameters. However we have also annotated this one with the @Header and @Body annotation to help Camel know what to bind here from the Message from the Exchange being processed.
Of course this could be simplified a lot if you for instance just have a simple id generator. But we wanted to demonstrate that you can use the Bean Binding annotations anywhere.
Code Block | ||||
---|---|---|---|---|
| ||||
public class MySimpleIdGenerator { public static int generate() { // generate a unique id return 123; } } |
And finally we just need to remember to have our bean registered in the Spring Registry:
Code Block | ||||
---|---|---|---|---|
| ||||
<bean id="myCorrelationIdGenerator" class="com.mycompany.MyIdGenerator"/>
|