Processor

The Processor interface is used to implement consumers of message exchanges or to implement a Message Translator.

Using a processor in a route

Once you have written a class which implements processor like this…​

public class MyProcessor implements Processor {
    public void process(Exchange exchange) throws Exception {
        // do something...
    }
}

You can then easily use this inside a route by declaring the bean in Spring, say via the XML:

<bean id="myProcessor" class="com.acme.MyProcessor"/>

Then in Camel you can do:

from("activemq:myQueue").process("myProcessor");

In your route you can also use the process DSL syntax for invoking a processor.

Processor myProcessor = new MyProcessor();
...
from("activemq:myQueue").process(myProcessor);

If you need to lookup the processor in the Registry then you can do:

from("activemq:myQueue").process("myProcessor");

Why use process when you can use to instead?

The process can be used in routes as an anonymous inner class such:

    from("activemq:myQueue").process(new Processor() {
        public void process(Exchange exchange) throws Exception {
            String payload = exchange.getIn().getBody(String.class);
            // do something with the payload and/or exchange here
           exchange.getIn().setBody("Changed body");
       }
    }).to("activemq:myOtherQueue");

This is usable for quickly whirling up some code. If the code in the inner class gets a bit more complicated it is of course advised to refactor it into a separate class. This approach is better if you do not want to use this processor again. From reusability perspective, it is not recommended to follow this approach.

Turning your processor into a full Component

There is a base class called ProcessorEndpoint which supports the full Endpoint semantics given a Processor instance.

So you just need to create a Component class by deriving from DefaultComponent which returns instances of ProcessorEndpoint. For more details see Writing Components