Since we're on a major migration process of this website, some component documents here are out of sync right now. In the meantime you may want to look at the early version of the new website
https://camel.apache.org/staging/
We would very much like to receive any feedback on the new site, please join the discussion on the Camel user mailing list.

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 (or registering it in JNDI if that is your Registry)

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

Then in Camel you can do

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

Using the process DSL

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 should use the processRef DSL:

from("activemq:myQueue").processRef("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.

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

See Also

© 2004-2015 The Apache Software Foundation.
Apache Camel, Camel, Apache, the Apache feather logo, and the Apache Camel project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
Graphic Design By Hiram