You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@avro.apache.org by kant kodali <ka...@gmail.com> on 2018/02/26 10:00:54 UTC

Avro Exception Stack Traces don't see help much

Hi All,

I have a payload of 100 fields that I am trying to parse using an Avro
Schema. It fails to parse somewhere but it is getting super hard to figure
out where exactly it fails. It would be great if the Exception stack trace
can include which field inside the payload it failed to parse. I am using
Avro 1.8.2


Here is my sample code

public static GenericRecord deserializeMessage(Schema schema, byte[]
sourceArray) {
        DatumReader<GenericRecord> datumReader = new
SpecificDatumReader<>(schema);
        Decoder decoder = DecoderFactory.get().binaryDecoder(sourceArray, null);
        try {
            return datumReader.read(null, decoder);
        } catch (IOException e) {
            log.error("", e);
            return null;
        }
}


And below is the Exception stack trace.

java.lang.ArrayIndexOutOfBoundsException: 29
18/02/26 00:05:30 INFO LineBufferedStream: stdout:  at
org.apache.avro.io.parsing.Symbol$Alternative.getSymbol(Symbol.java:402)
18/02/26 00:05:30 INFO LineBufferedStream: stdout:  at
org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:290)
18/02/26 00:05:30 INFO LineBufferedStream: stdout:  at
org.apache.avro.io.parsing.Parser.advance(Parser.java:88)
18/02/26 00:05:30 INFO LineBufferedStream: stdout:  at
org.apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:267)
18/02/26 00:05:30 INFO LineBufferedStream: stdout:  at
org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:155)
18/02/26 00:05:30 INFO LineBufferedStream: stdout:  at
org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:193)
18/02/26 00:05:30 INFO LineBufferedStream: stdout:  at
org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:183)
18/02/26 00:05:30 INFO LineBufferedStream: stdout:  at
org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:151)
18/02/26 00:05:30 INFO LineBufferedStream: stdout:  at
org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:142)


This Exception stack trace isn't helpful. Please let me know if there is a
way to figure out which field in the Avro message it fails?

Thanks!