[[avro-dataformat]]
= Avro DataFormat
:docTitle: Avro
:artifactId: camel-avro
:description: Serialize and deserialize messages using Apache Avro binary data format.
:since: 2.14
:supportLevel: Stable

*Since Camel {since}*

This component provides a dataformat for avro, which allows
serialization and deserialization of messages using Apache Avro's binary
dataformat. Since Camel 3.2 rpc functionality was moved into separate `camel-avro-rpc` component.

Maven users will need to add the following dependency to their `pom.xml`
for this component:

[source,xml]
------------------------------------------------------------
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-avro</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
------------------------------------------------------------


You can easily generate classes from a schema, using maven, ant etc.
More details can be found at the
http://avro.apache.org/docs/current/[Apache Avro documentation].

== Using the Avro data format

Using the avro data format is as easy as specifying that the class that
you want to marshal or unmarshal in your route.

[source,xml]
--------------------------------------------------------------------------------
    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
        <route>
            <from uri="direct:in"/>
            <marshal>
                <avro instanceClass="org.apache.camel.dataformat.avro.Message"/>
            </marshal>
            <to uri="log:out"/>
        </route>
    </camelContext>
--------------------------------------------------------------------------------

An alternative can be to specify the dataformat inside the context and
reference it from your route.

[source,xml]
--------------------------------------------------------------------------------------
    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
         <dataFormats>
            <avro id="avro" instanceClass="org.apache.camel.dataformat.avro.Message"/>
        </dataFormats>
        <route>
            <from uri="direct:in"/>
            <marshal><custom ref="avro"/></marshal>
            <to uri="log:out"/>
        </route>
    </camelContext>
--------------------------------------------------------------------------------------

In the same manner you can umarshal using the avro data format.


== Avro Dataformat Options

// dataformat options: START
The Avro dataformat supports 2 options, which are listed below.



[width="100%",cols="2s,1m,1m,6",options="header"]
|===
| Name | Default | Java Type | Description
| instanceClassName |  | String | Class name to use for marshal and unmarshalling
| contentTypeHeader | false | Boolean | Whether the data format should set the Content-Type header with the type from the data format if the data format is capable of doing so. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSON etc.
|===
// dataformat options: END

include::camel-spring-boot::page$avro-starter.adoc[]
