Processor
The Processor interface is used to implement consumers of message exchanges or to implement a Message Translator
...
Code Block |
---|
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)
Code Block |
---|
<bean id="myProcessor" class="com.acme. MyProcessor"/>
|
Then in Camel you can do
Code Block |
---|
from("activemq:myQueue").to("myProcessor");
|
Using the process DSL
In your route you can also use the process
DSL syntax for invoking a processor.
Code Block |
---|
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:
Code Block |
---|
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:
Code Block | ||||
---|---|---|---|---|
| ||||
from("mProcessor"); "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