[[cbor-dataformat]]
= CBOR DataFormat
:docTitle: CBOR
:artifactId: camel-cbor
:description: Unmarshal a CBOR payload to POJO and back.
:since: 3.0
:supportLevel: Stable
include::{cq-version}@camel-quarkus:ROOT:partial$reference/dataformats/cbor.adoc[opts=optional]

*Since Camel {since}*

CBOR is a Data Format which uses the
http://wiki.fasterxml.com/JacksonHome/[Jackson library] with the
https://github.com/FasterXML/jackson-dataformats-binary/tree/master/cbor[CBOR extension]
to unmarshal a CBOR payload into Java objects or to marshal Java objects
into a CBOR payload.

[source,java]
-------------------------------
from("activemq:My.Queue").
  unmarshal().cbor().
  to("mqseries:Another.Queue");
-------------------------------

== CBOR Options

// dataformat options: START
The CBOR dataformat supports 10 options, which are listed below.



[width="100%",cols="2s,1m,1m,6",options="header"]
|===
| Name | Default | Java Type | Description
| objectMapper |  | String | Lookup and use the existing CBOR ObjectMapper with the given id when using Jackson.
| useDefaultObjectMapper | true | Boolean | Whether to lookup and use default Jackson CBOR ObjectMapper from the registry.
| unmarshalTypeName |  | String | Class name of the java type to use when unmarshalling
| collectionTypeName |  | String | Refers to a custom collection type to lookup in the registry to use. This option should rarely be used, but allows to use different collection types than java.util.Collection based as default.
| useList | false | Boolean | To unmarshal to a List of Map or a List of Pojo.
| allowUnmarshallType | false | Boolean | If enabled then Jackson CBOR is allowed to attempt to use the CamelCBORUnmarshalType header during the unmarshalling. This should only be enabled when desired to be used.
| prettyPrint | false | Boolean | To enable pretty printing output nicely formatted. Is by default false.
| allowJmsType | false | Boolean | Used for JMS users to allow the JMSType header from the JMS spec to specify a FQN classname to use to unmarshal to.
| enableFeatures |  | String | Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma
| disableFeatures |  | String | Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature, or com.fasterxml.jackson.databind.MapperFeature Multiple features can be separated by comma
|===
// dataformat options: END

=== Using CBOR in Spring DSL

When using Data Format in Spring DSL you need to
declare the data formats first. This is done in the *DataFormats* XML
tag.

[source,xml]
-----------------------------------------------------------------------------------------------------------------------------
<dataFormats>
    <!-- here we define a CBOR data format with the id test and that it should use the TestPojo as the class type when
    doing unmarshal. -->
    <cbor id="test" unmarshalTypeName="org.apache.camel.component.cbor.TestPojo"/>
</dataFormats>
-----------------------------------------------------------------------------------------------------------------------------

And then you can refer to this id in the route:

[source,xml]
-------------------------------------
<route>
    <from uri="direct:back"/>
    <unmarshal><custom ref="test"/></unmarshal>
    <to uri="mock:reverse"/>
</route>
-------------------------------------

== Dependencies

[source,java]
-------------------------------------
<dependency>
   <groupId>org.apache.camel</groupId>
   <artifactId>camel-cbor</artifactId>
   <version>x.x.x</version>
</dependency>
-------------------------------------

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