Nav
You are viewing an older version of this section. Click here to navigate to the latest version.

Invocation Headers

The @InvocationHeaders parameter annotation marks the method parameter that will be used to pass in one or more of the headers received in the invocation scope. This annotation value can define a single header or a comma-separated list of header names. To denote all headers the value should be , or a comma-separated list of wildcard expressions such as 'MULE_, X-'. By default, if a named header is not present on the current message, an exception will be thrown. However, if the header name is defined with the '?' post fix, it will be marked as optional. When defining multiple header names or using wildcards, the parameter can be a java.util.Map or java.util.List. If a java.util.Map is used, the header name and value is passed in.

If java.util.List is used, just the header values are used. If a single header name is defined, the header type can be used as the parameter type, though java.util.List or java.util.Map can be used too. The Invocation headers collection is immutable, so the headers Map or List passed in will be immutable too. Attempting to write to the Map or List will result in an java.lang.UnsupportedOperationException.

The @InvocationHeaders annotation supports the following parameters:

Parameter Description

value

Optional. Defines the headers that should be injected into the parameter.

Restrictions

A method annotated with @Processor can have at most one parameter annotated with @Payload, @InboundHeaders, @InvocationHeaders or @OutboundHeaders.

For example this is not possible:


         
      
1
2
@Processor
  public Object myMethod(@Payload Object payload, @InvocationHeaders("*") Map<?, ?> headers) {

Examples

Inject the url header value from the invocation scope:


         
      
1
2
@Processor
 public Object myMethod(@InvocationHeaders("url") URL url) {

Inject the value of the header faz from the invocation scope if present:


         
      
1
2
@Processor
  public Object myMethod(@InvocationHeaders("faz?") String faz) {

Inject the foo and bar headers from the invocation scope with their values:


         
      
1
2
@Processor
 public Object myMethod(@InvocationHeaders("foo, bar") Map<?, ?> myHeaders) {

Inject all the headers from the invocation scope with their values:


         
      
1
2
@Processor
public Object myMethod(@InvocationHeaders("*") Map<?, ?> headers) {

Inject all the headers from the invocation scope with names starting with MULE_ or ba


         
      
1
2
@Processor
   public Object myMethod(@InvocationHeaders("MULE_*, ba*") Map<?, ?> headers) {

Inject the value of foo and bar headers, and if present the baz header value, all from the invocation scope:


         
      
1
2
@Processor
  public Object process(@InvocationHeaders("foo, bar, baz?") List<?> headers) {

In this topic: