Hi, Here is a failing test which I think might be a bug. Can someone point to me whats wrong with this code?
public class TestBinaryDecoderSeparateSchema { @Test public void checkAvroWithoutEmbeddedSchema () throws Exception { Person person = new Person(); ReflectData rdata = ReflectData.AllowNull.get(); Schema schema = rdata.getSchema(Person.class); // Write avro as binary ByteArrayOutputStream os = new ByteArrayOutputStream(); Encoder encoder = EncoderFactory.get().binaryEncoder(os, null); DatumWriter<Person> writer = new ReflectDatumWriter<Person>(schema, rdata); writer.write(person, encoder); encoder.flush(); byte[] bytes = os.toByteArray(); String binaryString = new String (bytes); log (binaryString); // Read avro binary string into GenericRecord BinaryDecoder decoder = DecoderFactory.get().binaryDecoder(binaryString.getBytes(), null); GenericDatumReader<GenericRecord> datumReader = new GenericDatumReader<GenericRecord> (); datumReader.setSchema(schema); GenericRecord record = datumReader.read(null, decoder); } @Test public void checkAvroWithEmbeddedSchema () throws Exception { Person person = new Person(); ReflectData rdata = ReflectData.AllowNull.get(); Schema schema = rdata.getSchema(Person.class); // Write avro with embedded schema ReflectDatumWriter<Person> datumWriter = new ReflectDatumWriter<Person> (Person.class, rdata); DataFileWriter<Person> fileWriter = new DataFileWriter<Person> (datumWriter); ByteArrayOutputStream baos = new ByteArrayOutputStream(); fileWriter.create(schema, baos); fileWriter.append(person); fileWriter.close(); byte[] bytes = baos.toByteArray(); String binaryString = new String (bytes); log (binaryString); // Read avro with embedded schema GenericDatumReader<GenericRecord> datumReader = new GenericDatumReader<GenericRecord> (); SeekableByteArrayInput avroInputStream = new SeekableByteArrayInput(bytes); DataFileReader<GenericRecord> fileReader = new DataFileReader<GenericRecord>(avroInputStream, datumReader); schema = fileReader.getSchema(); GenericRecord record = null; List<GenericRecord> records = new ArrayList<GenericRecord> (); while (fileReader.hasNext()) records.add (fileReader.next(record)); log ("Read " + records.size() + " records"); } private static class Person { String name = "John"; Long age = 30L; Address address = new Address(); } private static class Address { String city = "San Francisco"; Integer zipCode = 90900; } private static void log (String s) { System.out.println (s); } } *Exception is:* java.io.IOException: Invalid int encoding at org.apache.avro.io.BinaryDecoder.readInt(BinaryDecoder.java:145) at org.apache.avro.io.ValidatingDecoder.readInt(ValidatingDecoder.java:83) at org.apache.avro.generic.GenericDatumReader.readInt(GenericDatumReader.java:444) at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:159) at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:155) at org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:193) at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:183) at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:151) at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:155) at org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:193) at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:183) at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:151) at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:142) at org.apache.avro.io.TestBinaryDecoderSeparateSchema.checkAvroWithoutEmbeddedSchema(TestBinaryDecoderSeparateSchema.java:68) Thanks Sachin