[[barcode-dataformat]]
= Barcode DataFormat
:page-source: components/camel-barcode/src/main/docs/barcode-dataformat.adoc

*Available as of Camel version 2.14*

The Barcode data format is based on the
https://github.com/zxing/zxing[zxing library]. The goal of this
component is to create a barcode image from a String (marshal) and a
String from a barcode image (unmarshal). You're free to use all features
that zxing offers.

== Dependencies

To use the barcode data format in your camel routes you need to add the
a dependency on *camel-barcode* which implements this data format.

If you use maven you could just add the following to your pom.xml,
substituting the version number for the latest & greatest release (see
the download page for the latest versions).

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

== Barcode Options

// dataformat options: START
The Barcode dataformat supports 5 options, which are listed below.



[width="100%",cols="2s,1m,1m,6",options="header"]
|===
| Name | Default | Java Type | Description
| width |  | Integer | Width of the barcode
| height |  | Integer | Height of the barcode
| imageType |  | String | Image type of the barcode such as png
| barcodeFormat |  | String | Barcode format such as QR-Code
| 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
// spring-boot-auto-configure options: START
== Spring Boot Auto-Configuration

When using Spring Boot make sure to use the following Maven dependency to have support for auto configuration:

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


The component supports 6 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.dataformat.barcode.barcode-format* | Barcode format such as QR-Code |  | String
| *camel.dataformat.barcode.content-type-header* | 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. | false | Boolean
| *camel.dataformat.barcode.enabled* | Enable barcode dataformat | true | Boolean
| *camel.dataformat.barcode.height* | Height of the barcode |  | Integer
| *camel.dataformat.barcode.image-type* | Image type of the barcode such as png |  | String
| *camel.dataformat.barcode.width* | Width of the barcode |  | Integer
|===
// spring-boot-auto-configure options: END
ND

== Using the Java DSL

First you have to initialize the barcode data fomat class. You can use
the default constructor, or one of parameterized (see JavaDoc). The
default values are:

[width="100%",cols="10%,90%",options="header",]
|=======================================================================
|Parameter |Default Value 
|image type (BarcodeImageType) |PNG

|width |100 px

|height |100 px

|encoding |UTF-8

|barcode format (BarcodeFormat) |QR-Code
|=======================================================================

[source,java]
------------------------------------------
// QR-Code default
DataFormat code = new BarcodeDataFormat();
------------------------------------------

If you want to use zxing hints, you can use the 'addToHintMap' method of
your BarcodeDataFormat instance:

[source,java]
-----------------------------------------------------------
code.addToHintMap(DecodeHintType.TRY_HARDER, Boolean.true);
-----------------------------------------------------------

For possible hints, please consult the xzing documentation.

=== Marshalling

[source,java]
----------------------------
from("direct://code")
  .marshal(code)
  .to("file://barcode_out");
----------------------------

You can call the route from a test class with:

[source,java]
-------------------------------------------------------------
template.sendBody("direct://code", "This is a testmessage!");
-------------------------------------------------------------

You should find inside the 'barcode_out' folder this image:

image::qr-code.png[image]

=== Unmarshalling

The unmarshaller is generic. For unmarshalling you can use any
BarcodeDataFormat instance. If you've two instances, one for
(generating) QR-Code and one for PDF417, it doesn't matter which one
will be used.

[source,java]
--------------------------------------------------------------------
from("file://barcode_in?noop=true")
  .unmarshal(code) // for unmarshalling, the instance doesn't matter
  .to("mock:out");
--------------------------------------------------------------------

If you'll paste the QR-Code image above into the 'barcode_in' folder,
you should find '`This is a testmessage!`' inside the mock. You can find
the barcode data format as header variable:

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================

|Name |Type |Description

|BarcodeFormat |String |Value of com.google.zxing.BarcodeFormat.
|=======================================================================
 

 
