You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Xu ShiChang Desmond (JIRA)" <ji...@apache.org> on 2018/02/28 12:41:00 UTC

[jira] [Created] (AVRO-2151) ReflectData, JsonEncoder encoding runtime exception

Xu ShiChang Desmond created AVRO-2151:
-----------------------------------------

             Summary: ReflectData, JsonEncoder encoding runtime exception
                 Key: AVRO-2151
                 URL: https://issues.apache.org/jira/browse/AVRO-2151
             Project: Avro
          Issue Type: Bug
          Components: java
    Affects Versions: 1.8.2
            Reporter: Xu ShiChang Desmond


Using reflect data has a problem if a field is an array of an object (eg String[]) and using JsonEncoder.

SimpleĀ  reproduction of the problem
{code:java}
public static class Record {
  private String[] myfield = new String[]{"hello world"};
}

public static void main(String[] args) throws IOException {
  Schema s = SchemaBuilder.record("Record")
    .fields()
      .name("myfield").type(
        Schema.createArray(
         Schema.create(Schema.Type.STRING)
        )
      ).noDefault()
    .endRecord();

  System.out.println(s);

  ReflectData d = new ReflectData();
  d.createDatumWriter(s).write(new Record(),   EncoderFactory.get().jsonEncoder(s, System.out, true));
}
{code}
{code:java}
org.apache.avro.AvroTypeException: Incorrect number of items written. 1 more required.
	at org.apache.avro.io.ParsingEncoder.pop(ParsingEncoder.java:60)
	at org.apache.avro.io.JsonEncoder.writeArrayEnd(JsonEncoder.java:259)
	at org.apache.avro.reflect.ReflectDatumWriter.writeArray(ReflectDatumWriter.java:112)
	at org.apache.avro.generic.GenericDatumWriter.writeWithoutConversion(GenericDatumWriter.java:120)
	at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:75)
	at org.apache.avro.reflect.ReflectDatumWriter.write(ReflectDatumWriter.java:159)
	at org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:166)
	at org.apache.avro.specific.SpecificDatumWriter.writeField(SpecificDatumWriter.java:90)
	at org.apache.avro.reflect.ReflectDatumWriter.writeField(ReflectDatumWriter.java:191)
	at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:156)
	at org.apache.avro.generic.GenericDatumWriter.writeWithoutConversion(GenericDatumWriter.java:118)
	at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:75)
	at org.apache.avro.reflect.ReflectDatumWriter.write(ReflectDatumWriter.java:159)
	at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:62)
	at Bugged.main(Bugged.java:30)
{code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)