You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@avro.apache.org by Marcus Simonsen <ms...@gmail.com> on 2017/02/06 15:23:24 UTC

DateAsLongEncoding Decoding error

Hello.
I was very excited to start using the avro reflection serialization API!

I am however unable to properly use the annotation to customized encoding:

Here in my java bean I've used:

@AvroEncode(using = DateAsLongEncoding.class)
    private Date ts;


And then use the DatumWriter (successfully):
ByteArrayOutputStream bout = new ByteArrayOutputStream();

            DatumWriter<T> writer =
ReflectData.AllowNull.get().createDatumWriter(schema);
            BinaryEncoder encoder =
EncoderFactory.get().directBinaryEncoder(bout, null);
            writer.write(obj, encoder);
            encoder.flush();
             byte[]    serialized = bout.toByteArray();

But fails:
        DatumReader<T> reader =
ReflectData.AllowNull.get().createDatumReader(schema);

        BinaryDecoder decoder = DecoderFactory.get().binaryDecoder(b, null);

        return reader.read(null, decoder);  //throws Exception

Stack Trace:

Caused by: java.io.IOException: Invalid int encoding
    at org.apache.avro.io.BinaryDecoder.readInt(BinaryDecoder.java:145)
    at org.apache.avro.io.BinaryDecoder.readIndex(BinaryDecoder.java:423)
    at
org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:290)
    at org.apache.avro.io.parsing.Parser.advance(Parser.java:88)
    at
org.apache.avro.io.ResolvingDecoder.readLong(ResolvingDecoder.java:155)
    at
org.apache.avro.reflect.DateAsLongEncoding.read(DateAsLongEncoding.java:50)
    at
org.apache.avro.reflect.DateAsLongEncoding.read(DateAsLongEncoding.java:33)
    at org.apache.avro.reflect.CustomEncoding.read(CustomEncoding.java:45)
    at
org.apache.avro.reflect.FieldAccessUnsafe$UnsafeCustomEncodedField.read(FieldAccessUnsafe.java:353)
    at
org.apache.avro.reflect.ReflectDatumReader.readField(ReflectDatumReader.java:272)
    at
org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:230)
    at
org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:174)
    at
org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:152)
    at
org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:144)

    ... 25 more