Initial draft for Avro codec
diff --git a/avro/pom.xml b/avro/pom.xml
new file mode 100644
index 0000000..4c7775f
--- /dev/null
+++ b/avro/pom.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.mina</groupId>
+ <artifactId>mina-parent</artifactId>
+ <version>3.0.0-M3-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>mina-avro</artifactId>
+ <name>Apache MINA Serialization::Avro ${project.version}</name>
+ <packaging>jar</packaging>
+
+ <properties>
+ <symbolicName>${project.groupId}.avro</symbolicName>
+ <exportedPackage>${project.groupId}</exportedPackage>
+ <avro.version>1.7.4</avro.version>
+ </properties>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.apache.avro</groupId>
+ <artifactId>avro</artifactId>
+ <version>${avro.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>mina-codec</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>mina-codec</artifactId>
+ <scope>test</scope>
+ <type>test-jar</type>
+ </dependency>
+ </dependencies>
+ <!--<build>-->
+ <!--<plugins>-->
+ <!--<plugin>-->
+ <!--<groupId>org.apache.avro</groupId>-->
+ <!--<artifactId>avro-maven-plugin</artifactId>-->
+ <!--<version>1.7.4</version>-->
+ <!--<executions>-->
+ <!--<execution>-->
+ <!--<phase>generate-sources</phase>-->
+ <!--<goals>-->
+ <!--<goal>schema</goal>-->
+ <!--</goals>-->
+ <!--<configuration>-->
+ <!--<sourceDirectory>${project.basedir}/src/test/resources/</sourceDirectory>-->
+ <!--<outputDirectory>${project.basedir}/src/test/java/</outputDirectory>-->
+ <!--</configuration>-->
+ <!--</execution>-->
+ <!--</executions>-->
+ <!--</plugin>-->
+ <!--<plugin>-->
+ <!--<groupId>org.apache.maven.plugins</groupId>-->
+ <!--<artifactId>maven-compiler-plugin</artifactId>-->
+ <!--<configuration>-->
+ <!--<source>1.7</source>-->
+ <!--<target>1.7</target>-->
+ <!--</configuration>-->
+ <!--</plugin>-->
+ <!--</plugins>-->
+ <!--</build>-->
+</project>
+
diff --git a/avro/src/main/java/org/apache/mina/avro/codec/AvroDecoder.java b/avro/src/main/java/org/apache/mina/avro/codec/AvroDecoder.java
new file mode 100644
index 0000000..997d73a
--- /dev/null
+++ b/avro/src/main/java/org/apache/mina/avro/codec/AvroDecoder.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.mina.avro.codec;
+
+import org.apache.avro.Schema;
+import org.apache.mina.avro.codec.serialization.AvroMessageDecoder;
+import org.apache.mina.codec.delimited.IoBufferDecoder;
+import org.apache.mina.codec.delimited.SizePrefixedDecoder;
+import org.apache.mina.codec.delimited.ints.VarInt;
+
+/**
+ *
+ */
+public class AvroDecoder<GenericRecord> extends SizePrefixedDecoder<GenericRecord> {
+
+ private Schema schema;
+
+ public AvroDecoder(IoBufferDecoder<Integer> sizeDecoder, IoBufferDecoder<GenericRecord> payloadDecoder, Schema schema) {
+ super(new VarInt().getDecoder(), new AvroMessageDecoder<GenericRecord>(schema));
+ this.schema = schema;
+ }
+}
diff --git a/avro/src/main/java/org/apache/mina/avro/codec/AvroEncoder.java b/avro/src/main/java/org/apache/mina/avro/codec/AvroEncoder.java
new file mode 100644
index 0000000..51d3b75
--- /dev/null
+++ b/avro/src/main/java/org/apache/mina/avro/codec/AvroEncoder.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.mina.avro.codec;
+
+import org.apache.avro.generic.GenericRecord;
+import org.apache.mina.avro.codec.serialization.AvroMessageEncoder;
+import org.apache.mina.codec.delimited.ByteBufferEncoder;
+import org.apache.mina.codec.delimited.SizePrefixedEncoder;
+import org.apache.mina.codec.delimited.ints.VarInt;
+
+/**
+ *
+ */
+public class AvroEncoder<IN extends GenericRecord> extends SizePrefixedEncoder<GenericRecord> {
+ public AvroEncoder(ByteBufferEncoder<Integer> sizeEncoder, ByteBufferEncoder<GenericRecord> payloadEncoder) {
+ super(new VarInt().getEncoder(), new AvroMessageEncoder<GenericRecord>());
+ }
+}
diff --git a/avro/src/main/java/org/apache/mina/avro/codec/serialization/AvroMessageDecoder.java b/avro/src/main/java/org/apache/mina/avro/codec/serialization/AvroMessageDecoder.java
new file mode 100644
index 0000000..2df618e
--- /dev/null
+++ b/avro/src/main/java/org/apache/mina/avro/codec/serialization/AvroMessageDecoder.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.mina.avro.codec.serialization;
+
+import org.apache.avro.Schema;
+import org.apache.avro.generic.GenericData;
+import org.apache.avro.generic.GenericDatumReader;
+import org.apache.avro.io.BinaryDecoder;
+import org.apache.avro.io.DecoderFactory;
+import org.apache.mina.codec.IoBuffer;
+import org.apache.mina.codec.delimited.IoBufferDecoder;
+
+import java.io.IOException;
+
+/**
+ *
+ */
+public class AvroMessageDecoder<GenericRecord> extends IoBufferDecoder<GenericRecord> {
+
+ private Schema schema;
+
+ /**
+ * Default Constructor
+ * @param schema
+ */
+ public AvroMessageDecoder(Schema schema) {
+ this.schema = schema;
+ }
+
+ @Override
+ public GenericRecord decode(IoBuffer input) {
+ BinaryDecoder binaryDecoder = DecoderFactory.get().binaryDecoder(input.array(), null);
+ GenericDatumReader<GenericRecord> recordGenericDatumReader = new GenericDatumReader<GenericRecord>(schema);
+ GenericRecord result = null;
+ try {
+ result = recordGenericDatumReader.read(null, binaryDecoder);
+ }catch (IOException ioEx) {
+ ioEx.printStackTrace();
+ }
+ return result;
+ }
+}
diff --git a/avro/src/main/java/org/apache/mina/avro/codec/serialization/AvroMessageEncoder.java b/avro/src/main/java/org/apache/mina/avro/codec/serialization/AvroMessageEncoder.java
new file mode 100644
index 0000000..ecddad2
--- /dev/null
+++ b/avro/src/main/java/org/apache/mina/avro/codec/serialization/AvroMessageEncoder.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.mina.avro.codec.serialization;
+
+import org.apache.avro.generic.GenericDatumWriter;
+import org.apache.avro.generic.GenericRecord;
+import org.apache.avro.io.DatumWriter;
+import org.apache.avro.io.Encoder;
+import org.apache.avro.io.EncoderFactory;
+import org.apache.mina.codec.delimited.ByteBufferEncoder;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+/**
+ *
+ */
+public class AvroMessageEncoder<OUT extends GenericRecord> extends ByteBufferEncoder<GenericRecord> {
+
+ private ByteBuffer encodedMessage;
+
+ @Override
+ public int getEncodedSize(GenericRecord message) {
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ DatumWriter<GenericRecord> writer = new GenericDatumWriter<GenericRecord>(message.getSchema());
+ Encoder encoder = EncoderFactory.get().binaryEncoder(out, null);
+ try {
+ writer.write(message, encoder);
+ encoder.flush();
+ byte[] encoded = out.toByteArray();
+ encodedMessage = ByteBuffer.wrap(encoded);
+ out.close();
+ } catch (IOException ioEx) {
+ // :(
+ }
+ return encodedMessage != null ? encodedMessage.capacity() : -1;
+ }
+
+ @Override
+ public void writeTo(GenericRecord message, ByteBuffer buffer) {
+ buffer.put(encodedMessage);
+ }
+}
diff --git a/avro/src/test/java/org/apache/mina/avro/codec/serialization/AvroTest.java b/avro/src/test/java/org/apache/mina/avro/codec/serialization/AvroTest.java
new file mode 100644
index 0000000..5a754fc
--- /dev/null
+++ b/avro/src/test/java/org/apache/mina/avro/codec/serialization/AvroTest.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.mina.avro.codec.serialization;
+
+import org.apache.avro.Schema;
+import org.apache.avro.generic.GenericData;
+import org.apache.avro.generic.GenericRecord;
+import org.apache.mina.codec.IoBuffer;
+import org.apache.mina.codec.delimited.ByteBufferEncoder;
+import org.apache.mina.codec.delimited.IoBufferDecoder;
+import org.apache.mina.codec.delimited.serialization.GenericSerializerTest;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ */
+public class AvroTest extends GenericSerializerTest {
+
+ private static Schema SCHEMA;
+
+ static {
+ try {
+ SCHEMA = new Schema.Parser().parse(AvroTest.class.getClassLoader().getResourceAsStream("user.avsc"));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public IoBufferDecoder getDecoder() throws Exception {
+ return new AvroMessageDecoder<GenericRecord>(SCHEMA);
+ }
+
+ @Override
+ public ByteBufferEncoder getEncoder() throws Exception {
+ return new AvroMessageEncoder<GenericRecord>();
+ }
+
+ @Override
+ public List<GenericRecord> getObjects() {
+ List<GenericRecord> genericRecordList = new ArrayList<GenericRecord>(1);
+ GenericRecord record1 = new GenericData.Record(SCHEMA);
+ record1.put("name", "Black Jack");
+ record1.put("favorite_number", 11);
+ record1.put("favorite_color", "Black");
+ genericRecordList.add(record1);
+
+ return genericRecordList;
+ }
+
+ @Test
+ public void testMessage() throws Exception {
+ ByteBufferEncoder<GenericRecord> encoder = getEncoder();
+ AvroMessageDecoder<GenericRecord> decoder = new AvroMessageDecoder<GenericRecord>(SCHEMA);
+
+ for (GenericRecord object : getObjects()) {
+ GenericRecord message = decoder.decode(IoBuffer
+ .wrap(encoder.encode(object)));
+ System.out.println(message);
+ }
+ }
+}
diff --git a/avro/src/test/java/org/apache/mina/avro/generated/User.java b/avro/src/test/java/org/apache/mina/avro/generated/User.java
new file mode 100644
index 0000000..e0d91c3
--- /dev/null
+++ b/avro/src/test/java/org/apache/mina/avro/generated/User.java
@@ -0,0 +1,236 @@
+/**
+ * Autogenerated by Avro
+ *
+ * DO NOT EDIT DIRECTLY
+ */
+package org.apache.mina.avro.generated;
+@SuppressWarnings("all")
+@org.apache.avro.specific.AvroGenerated
+public class User extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord {
+ public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"User\",\"namespace\":\"org.apache.mina.avro.generated\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"favorite_number\",\"type\":[\"int\",\"null\"]},{\"name\":\"favorite_color\",\"type\":[\"string\",\"null\"]}]}");
+ public static org.apache.avro.Schema getClassSchema() { return SCHEMA$; }
+ @Deprecated public java.lang.CharSequence name;
+ @Deprecated public java.lang.Integer favorite_number;
+ @Deprecated public java.lang.CharSequence favorite_color;
+
+ /**
+ * Default constructor.
+ */
+ public User() {}
+
+ /**
+ * All-args constructor.
+ */
+ public User(java.lang.CharSequence name, java.lang.Integer favorite_number, java.lang.CharSequence favorite_color) {
+ this.name = name;
+ this.favorite_number = favorite_number;
+ this.favorite_color = favorite_color;
+ }
+
+ public org.apache.avro.Schema getSchema() { return SCHEMA$; }
+ // Used by DatumWriter. Applications should not call.
+ public java.lang.Object get(int field$) {
+ switch (field$) {
+ case 0: return name;
+ case 1: return favorite_number;
+ case 2: return favorite_color;
+ default: throw new org.apache.avro.AvroRuntimeException("Bad index");
+ }
+ }
+ // Used by DatumReader. Applications should not call.
+ @SuppressWarnings(value="unchecked")
+ public void put(int field$, java.lang.Object value$) {
+ switch (field$) {
+ case 0: name = (java.lang.CharSequence)value$; break;
+ case 1: favorite_number = (java.lang.Integer)value$; break;
+ case 2: favorite_color = (java.lang.CharSequence)value$; break;
+ default: throw new org.apache.avro.AvroRuntimeException("Bad index");
+ }
+ }
+
+ /**
+ * Gets the value of the 'name' field.
+ */
+ public java.lang.CharSequence getName() {
+ return name;
+ }
+
+ /**
+ * Sets the value of the 'name' field.
+ * @param value the value to set.
+ */
+ public void setName(java.lang.CharSequence value) {
+ this.name = value;
+ }
+
+ /**
+ * Gets the value of the 'favorite_number' field.
+ */
+ public java.lang.Integer getFavoriteNumber() {
+ return favorite_number;
+ }
+
+ /**
+ * Sets the value of the 'favorite_number' field.
+ * @param value the value to set.
+ */
+ public void setFavoriteNumber(java.lang.Integer value) {
+ this.favorite_number = value;
+ }
+
+ /**
+ * Gets the value of the 'favorite_color' field.
+ */
+ public java.lang.CharSequence getFavoriteColor() {
+ return favorite_color;
+ }
+
+ /**
+ * Sets the value of the 'favorite_color' field.
+ * @param value the value to set.
+ */
+ public void setFavoriteColor(java.lang.CharSequence value) {
+ this.favorite_color = value;
+ }
+
+ /** Creates a new User RecordBuilder */
+ public static org.apache.mina.avro.generated.User.Builder newBuilder() {
+ return new org.apache.mina.avro.generated.User.Builder();
+ }
+
+ /** Creates a new User RecordBuilder by copying an existing Builder */
+ public static org.apache.mina.avro.generated.User.Builder newBuilder(org.apache.mina.avro.generated.User.Builder other) {
+ return new org.apache.mina.avro.generated.User.Builder(other);
+ }
+
+ /** Creates a new User RecordBuilder by copying an existing User instance */
+ public static org.apache.mina.avro.generated.User.Builder newBuilder(org.apache.mina.avro.generated.User other) {
+ return new org.apache.mina.avro.generated.User.Builder(other);
+ }
+
+ /**
+ * RecordBuilder for User instances.
+ */
+ public static class Builder extends org.apache.avro.specific.SpecificRecordBuilderBase<User>
+ implements org.apache.avro.data.RecordBuilder<User> {
+
+ private java.lang.CharSequence name;
+ private java.lang.Integer favorite_number;
+ private java.lang.CharSequence favorite_color;
+
+ /** Creates a new Builder */
+ private Builder() {
+ super(org.apache.mina.avro.generated.User.SCHEMA$);
+ }
+
+ /** Creates a Builder by copying an existing Builder */
+ private Builder(org.apache.mina.avro.generated.User.Builder other) {
+ super(other);
+ }
+
+ /** Creates a Builder by copying an existing User instance */
+ private Builder(org.apache.mina.avro.generated.User other) {
+ super(org.apache.mina.avro.generated.User.SCHEMA$);
+ if (isValidValue(fields()[0], other.name)) {
+ this.name = data().deepCopy(fields()[0].schema(), other.name);
+ fieldSetFlags()[0] = true;
+ }
+ if (isValidValue(fields()[1], other.favorite_number)) {
+ this.favorite_number = data().deepCopy(fields()[1].schema(), other.favorite_number);
+ fieldSetFlags()[1] = true;
+ }
+ if (isValidValue(fields()[2], other.favorite_color)) {
+ this.favorite_color = data().deepCopy(fields()[2].schema(), other.favorite_color);
+ fieldSetFlags()[2] = true;
+ }
+ }
+
+ /** Gets the value of the 'name' field */
+ public java.lang.CharSequence getName() {
+ return name;
+ }
+
+ /** Sets the value of the 'name' field */
+ public org.apache.mina.avro.generated.User.Builder setName(java.lang.CharSequence value) {
+ validate(fields()[0], value);
+ this.name = value;
+ fieldSetFlags()[0] = true;
+ return this;
+ }
+
+ /** Checks whether the 'name' field has been set */
+ public boolean hasName() {
+ return fieldSetFlags()[0];
+ }
+
+ /** Clears the value of the 'name' field */
+ public org.apache.mina.avro.generated.User.Builder clearName() {
+ name = null;
+ fieldSetFlags()[0] = false;
+ return this;
+ }
+
+ /** Gets the value of the 'favorite_number' field */
+ public java.lang.Integer getFavoriteNumber() {
+ return favorite_number;
+ }
+
+ /** Sets the value of the 'favorite_number' field */
+ public org.apache.mina.avro.generated.User.Builder setFavoriteNumber(java.lang.Integer value) {
+ validate(fields()[1], value);
+ this.favorite_number = value;
+ fieldSetFlags()[1] = true;
+ return this;
+ }
+
+ /** Checks whether the 'favorite_number' field has been set */
+ public boolean hasFavoriteNumber() {
+ return fieldSetFlags()[1];
+ }
+
+ /** Clears the value of the 'favorite_number' field */
+ public org.apache.mina.avro.generated.User.Builder clearFavoriteNumber() {
+ favorite_number = null;
+ fieldSetFlags()[1] = false;
+ return this;
+ }
+
+ /** Gets the value of the 'favorite_color' field */
+ public java.lang.CharSequence getFavoriteColor() {
+ return favorite_color;
+ }
+
+ /** Sets the value of the 'favorite_color' field */
+ public org.apache.mina.avro.generated.User.Builder setFavoriteColor(java.lang.CharSequence value) {
+ validate(fields()[2], value);
+ this.favorite_color = value;
+ fieldSetFlags()[2] = true;
+ return this;
+ }
+
+ /** Checks whether the 'favorite_color' field has been set */
+ public boolean hasFavoriteColor() {
+ return fieldSetFlags()[2];
+ }
+
+ /** Clears the value of the 'favorite_color' field */
+ public org.apache.mina.avro.generated.User.Builder clearFavoriteColor() {
+ favorite_color = null;
+ fieldSetFlags()[2] = false;
+ return this;
+ }
+
+ @Override
+ public User build() {
+ try {
+ User record = new User();
+ record.name = fieldSetFlags()[0] ? this.name : (java.lang.CharSequence) defaultValue(fields()[0]);
+ record.favorite_number = fieldSetFlags()[1] ? this.favorite_number : (java.lang.Integer) defaultValue(fields()[1]);
+ record.favorite_color = fieldSetFlags()[2] ? this.favorite_color : (java.lang.CharSequence) defaultValue(fields()[2]);
+ return record;
+ } catch (Exception e) {
+ throw new org.apache.avro.AvroRuntimeException(e);
+ }
+ }
+ }
+}
diff --git a/avro/src/test/resources/user.avsc b/avro/src/test/resources/user.avsc
new file mode 100644
index 0000000..ddf304c
--- /dev/null
+++ b/avro/src/test/resources/user.avsc
@@ -0,0 +1,10 @@
+{
+ "namespace": "org.apache.mina.avro.generated",
+ "type": "record",
+ "name": "User",
+ "fields": [
+ {"name": "name", "type": "string"},
+ {"name": "favorite_number", "type": ["int", "null"]},
+ {"name": "favorite_color", "type": ["string", "null"]}
+ ]
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index ee95d87..d9c0db0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -117,6 +117,7 @@
<module>protobuf</module>
<module>benchmarks</module>
<module>benchmarks2</module>
+ <module>avro</module>
</modules>
<dependencyManagement>