The message translator pattern, shown in Figure 14 describes a component that modifies the contents of a message, translating it to a different format. You can use Apache Camel's bean integration feature to perform the message translation.
You can transform a message using bean integration, which
enables you to call a method on any registered bean. For
example, to call the method, myMethodName(), on the
bean with ID, myTransformerBean:
from("activemq:SomeQueue")
.beanRef("myTransformerBean", "myMethodName")
.to("mqseries:AnotherQueue");Where the myTransformerBean bean is defined in
either a Spring XML file or in JNDI. If, you omit the method
name parameter from beanRef(), the bean integration
will try to deduce the method name to invoke by examining the
message exchange.
You can also add your own explicit Processor
instance to perform the transformation, as follows:
from("direct:start").process(new Processor() {
public void process(Exchange exchange) {
Message in = exchange.getIn();
in.setBody(in.getBody(String.class) + " World!");
}
}).to("mock:result");Or, you can use the DSL to explicitly configure the transformation, as follows:
from("direct:start").setBody(body().append(" World!")).to("mock:result");You can also use templating to consume a message from one destination, transform it with something like Velocity in EIP Component Reference or XQuery and then send it on to another destination. For example, using the InOnly exchange pattern (one-way messaging) :
from("activemq:My.Queue").
to("velocity:com/acme/MyResponse.vm").
to("activemq:Another.Queue");If you want to use InOut (request-reply)
semantics to process requests on the My.Queue queue
on ActiveMQ in EIP Component Reference with a template generated response, then
you could use a route like the following to send responses back
to the JMSReplyTo destination:
from("activemq:My.Queue").
to("velocity:com/acme/MyResponse.vm");








