Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

Annotation

Meaning

Parameter

@Body

To bind to an inbound message body

 

@ExchangeException

To bind to an Exception set on the exchange (Camel 2.0)

 

@Header

To bind to an inbound message header

String name of the header

@Headers

To bind to the Map of the inbound message headers

 

@OutHeaders

To bind to the Map of the outbound message headers

 

@Property

To bind to a named property on the exchange

String name of the property

@Properties

To bind to the property map on the exchange

 

@Handler

Not part as a type parameter but stated in this table anyway to spread the good word that we have this annotation in Camel now. See more at Bean Binding.

 

The follow annotations @Headers, @OutHeaders and @Properties binds to the backing java.util.Map so you can alter the content of these maps directly, for instance using the put method to add a new entry. See the OrderService class at Exception Clause for such an example. You can use @Header("myHeader") and @Property("myProperty") to access the backing java.util.Map.

Example

In this example below we have a @MessageDriven @Consume consumer (like message driven) that consumes JMS messages from the activemq queue. We use the @Header and @Body parameter binding annotations to bind from the JMSMessage to the method parameters.

Code Block
public class Foo {
	
    @MessageDriven@Consume(uri = "activemq:my.queue")
    public void doSomething(@Header(name = "JMSCorrelationID") String correlationID, @Body String body) {
		// process the inbound message here
    }

}

In the above Camel will extract the value of Message.getJMSCorrelationID(), then using the Type Converter to adapt the value to the type of the parameter if required - it will inject the parameter value for the correlationID parameter. Then the payload of the message will be converted to a String and injected into the body parameter.

You don't necessarily need to use the @MessageDriven annotation; @Consume annotation if you don't want to as you could also make use of the Camel DSL to route to the beans methodbean's method as well.

Using the DSL to invoke the bean method

...

Code Block
public class Foo {
    public void doSomething(@Header(name = "JMSCorrelationID") String correlationID, @Body String body) {
		// process the inbound message here
    }

}

...

Code Block
    public void doSomething(@Header(name = "user") String user, @Body String body, Exchange exchange) {
        exchange.getIn().setBody(body + "MyBean");
    }
Include Page
CAMEL:Annotation Based Expression LanguageCAMEL:
Annotation Based Expression Language