[ 
https://issues.apache.org/jira/browse/AVRO-1650?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14370052#comment-14370052
 ] 

Sachin Goyal commented on AVRO-1650:
------------------------------------

Thanks [~robair]!
I tried ISO-8859-1 and it did work just fine.

For other users, this link explains in good detail too:
http://stackoverflow.com/questions/15925458/iso-8859-1-encoding-and-binary-data-preservation
 

> Avro deserialization fails depending on the value of integer/long fields
> ------------------------------------------------------------------------
>
>                 Key: AVRO-1650
>                 URL: https://issues.apache.org/jira/browse/AVRO-1650
>             Project: Avro
>          Issue Type: Bug
>            Reporter: Sachin Goyal
>
> Here is a test that fails depending on the value of the zipCode integer.
> {code}
> public class TestBinaryDecoderSeparateSchema {
>   @Test
>   public void checkAvroWithoutEmbeddedSchema () throws Exception {
>     log ("\n\n\nBeginning without-schema\n");
>     Person datum = new Person();
>     ReflectData rdata = ReflectData.AllowNull.get();
>     Schema schema = rdata.getSchema(Person.class);
>     // Write avro as binary
>     ByteArrayOutputStream baos = new ByteArrayOutputStream();
>     DatumWriter<Person> dout = new ReflectDatumWriter<Person>(Person.class, 
> rdata);
>     Encoder encoder = EncoderFactory.get().binaryEncoder(baos, null);
>     dout.write(datum, encoder);
>     encoder.flush();
>     byte[] bytes = baos.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);
>     log ("Read zipCode = " + record.get("zipCode"));
>   }
>   @Test
>   public void checkAvroWithEmbeddedSchema () throws Exception {
>     log ("\n\n\nBeginning with-schema\n");
>     Person datum = new Person();
>     ReflectData rdata = ReflectData.AllowNull.get();
>     Schema schema = rdata.getSchema(Person.class);
>     // Write avro with embedded schema
>     ByteArrayOutputStream baos = new ByteArrayOutputStream();
>     ReflectDatumWriter<Person> dout = new ReflectDatumWriter<Person> 
> (Person.class, rdata);
>     DataFileWriter<Person> fileWriter = new DataFileWriter<Person> (dout);
>     fileWriter.create(schema, baos);
>     fileWriter.append(datum);
>     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");
>    log ("Read zipCode = " + records.get(0).get("zipCode"));
>   }
>   private static class Person {
>     Integer zipCode = 90900;
>   }
>   private static void log (String s) {
>     System.out.println (s);
>   }
> }
> {code}
> \\
> *Issues:*
> # zipCode = 1, no exception but data zipCode is readWrong
> # zipCode = 90900, exception in checkAvroWithoutEmbeddedSchema()
> {color:red}
> 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)
> {color}
> \\
> Am I even supposed to read/write like the way shown in 
> checkAvroWithoutEmbeddedSchema()?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to