Camel supports the Normalizer from the EIP patterns book.

The normalizer pattern is used to process messages that are semantically equivalent, but arrive in different formats. The normalizer transforms the incoming messages into a common format.


In Apache Camel, you can implement the normalizer pattern by combining a Content Based Router, which detects the incoming message’s format, with a collection of different Message Translator's, which transform the different incoming formats into a common format.


This example shows a Message Normalizer that converts two types of XML messages into a common format. Messages in this common format are then routed.

// we need to normalize two types of incoming messages

In this case we’re using a Java Bean as the normalizer.

The class looks like this:

// Java
public class MyNormalizer {

    public void employeeToPerson(Exchange exchange, @XPath("/employee/name/text()") String name) {

    public void customerToPerson(Exchange exchange, @XPath("/customer/@name") String name) {

    private String createPerson(String name) {
        return "<person name=\" + name + \"/>";

The same example in XML:

<camelContext xmlns="">
    <from uri="direct:start"/>
        <to uri="bean:normalizer?method=employeeToPerson"/>
        <to uri="bean:normalizer?method=customerToPerson"/>
    <to uri="mock:result"/>

<bean id="normalizer" class="org.apache.camel.processor.MyNormalizer"/>

In case there are many incoming formats, then the Content Based Router may end up with too many choices. In this situation then an alternative is to use Dynamic to that computes a Bean endpoint, to be called that acts as Message Translator.