Repository: camel
Updated Branches:
  refs/heads/master af50946b7 -> 1aa62f89e


Added Avro Dataformat to Gitbook


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/1aa62f89
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/1aa62f89
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/1aa62f89

Branch: refs/heads/master
Commit: 1aa62f89e968c3c504ae69b8ba7d25a658c16b03
Parents: af50946
Author: Andrea Cosentino <[email protected]>
Authored: Tue Aug 23 13:46:17 2016 +0200
Committer: Andrea Cosentino <[email protected]>
Committed: Tue Aug 23 13:46:17 2016 +0200

----------------------------------------------------------------------
 .../src/main/docs/avro-dataformat.adoc          | 152 +++++++++++++++++++
 1 file changed, 152 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/1aa62f89/components/camel-avro/src/main/docs/avro-dataformat.adoc
----------------------------------------------------------------------
diff --git a/components/camel-avro/src/main/docs/avro-dataformat.adoc 
b/components/camel-avro/src/main/docs/avro-dataformat.adoc
new file mode 100644
index 0000000..f474baf
--- /dev/null
+++ b/components/camel-avro/src/main/docs/avro-dataformat.adoc
@@ -0,0 +1,152 @@
+[[avro-AvroDataformat]]
+Avro Dataformat
+~~~~~~~~~~~~~~~
+
+*Available as of Camel 2.10*
+
+This component provides a dataformat for avro, which allows
+serialization and deserialization of messages using Apache Avro's binary
+dataformat. Moreover, it provides support for Apache Avro's rpc, by
+providing producers and consumers endpoint for using avro over netty or
+http.
+
+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>
+------------------------------------------------------------
+
+[[avro-ApacheAvroOverview]]
+Apache Avro Overview
+^^^^^^^^^^^^^^^^^^^^
+
+Avro allows you to define message types and a protocol using a json like
+format and then generate java code for the specified types and messages.
+An example of how a schema looks like is below.
+
+[source,xml]
+------------------------------------------------------------------------------------------
+{"namespace": "org.apache.camel.avro.generated",
+ "protocol": "KeyValueProtocol",
+
+ "types": [
+     {"name": "Key", "type": "record",
+      "fields": [
+          {"name": "key",   "type": "string"}
+      ]
+     },
+     {"name": "Value", "type": "record",
+      "fields": [
+          {"name": "value",   "type": "string"}
+      ]
+     }
+ ],
+
+ "messages": {
+     "put": {
+         "request": [{"name": "key", "type": "Key"}, {"name": "value", "type": 
"Value"} ],
+         "response": "null"
+     },
+     "get": {
+         "request": [{"name": "key", "type": "Key"}],
+         "response": "Value"
+     }
+ }
+}
+------------------------------------------------------------------------------------------
+
+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].
+
+However, it doesn't enforce a schema first approach and you can create
+schema for your existing classes. *Since 2.12* you can use existing
+protocol interfaces to make RCP calls. You should use interface for the
+protocol itself and POJO beans or primitive/String classes for parameter
+and result types. Here is an example of the class that corresponds to
+schema above:
+
+[source,java]
+--------------------------------------------------------------
+package org.apache.camel.avro.reflection;
+
+public interface KeyValueProtocol {
+    void put(String key, Value value);
+    Value get(String key);
+}
+
+class Value {
+    private String value;
+    public String getValue() { return value; }
+    public void setValue(String value) { this.value = value; }
+}
+--------------------------------------------------------------
+
+_Note: Existing classes can be used only for RPC (see below), not in
+data format._
+
+[[avro-UsingtheAvrodataformat]]
+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 ref="avro"/>
+            <to uri="log:out"/>
+        </route>
+    </camelContext>
+--------------------------------------------------------------------------------------
+
+In the same manner you can umarshal using the avro data format.
+
+
+[[avro-AvroDataformat-options]]
+Avro Dataformat Options
+^^^^^^^^^^^^^^^^^^^^^^^
+
+// dataformat options: START
+The Avro dataformat supports 1 options which are listed below.
+
+
+
+{% raw %}
+[width="100%",cols="2s,1m,1m,6",options="header"]
+|=======================================================================
+| Name | Default | Java Type | Description
+| instanceClassName |  | String | Class name to use for marshal and 
unmarshalling
+|=======================================================================
+{% endraw %}
+// dataformat options: END
+

Reply via email to