The message translator pattern, shown in Figure 4.8 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
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 JMSReplyTo
destination:
from("activemq:My.Queue").
to("velocity:com/acme/MyResponse.vm");