Camel supports a pluggable
DataFormat to allow messages to be marshalled to and from binary or text formats to support a kind of Message Translator.
There are more than 40 different Data Formats that supports formats such as XML, CSV, JSon, YAML, Avro, Protobuf, and many more.
If you receive a message from one of the Camel Components such as File, HTTP or JMS you often want to unmarshal the payload into some bean so that you can process it using some Bean Integration or perform Predicate evaluation and so forth. To do this use the
unmarshal word in the DSL.
DataFormat jaxb = new JaxbDataFormat("com.acme.model"); from("activemq:My.Queue"). unmarshal(jaxb). to("mqseries:Another.Queue");
Marshalling is the opposite of unmarshalling, where a bean is marshalled into some binary or textual format for transmission over some transport via a Camel Component. Marshalling is used in the same way as unmarshalling above; in the DSL you can use a DataFormat instance, you can configure the DataFormat dynamically using the DSL or you can refer to a named instance of the format in the Registry.
The following example marshals using a named JAXB data format to perform a kind of Message Translator:
from("file://foo/bar"). marshal("jaxb"). to("activemq:Some.Queue");
This example shows how to configure the data type just once and reuse it on multiple routes:
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <dataFormats> <jaxb id="myJaxb" prettyPrint="true" contextPath="org.apache.camel.example"/> </dataFormats> <route> <from uri="direct:start"/> <marshal> <custom ref="myJaxb"/> </marshal> <to uri="direct:marshalled"/> </route> <route> <from uri="direct:marshalled"/> <unmarshal> <custom ref="myJaxb"/> </unmarshal> <to uri="mock:result"/> </route> </camelContext>
You can also define reusable data formats as Spring beans:
<bean id="myJaxb" class="org.apache.camel.model.dataformat.JaxbDataFormat"> <property name="prettyPrint" value="true"/> <property name="contextPath" value="org.apache.camel.example"/> </bean>