avro-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jeffrey Mullins (BLOOMBERG/ BOSTON)" <jmullin...@bloomberg.net>
Subject GenericData union validation - IndexOutOfBoundsException
Date Tue, 09 Dec 2014 20:30:24 GMT
Hi,

When invoking GenericData.get().validate() with a union schema containing multiple record
schemas an IndexOutOfBoundsException is possible. 

The exception results under the following conditions:
  1) Union contains multiple record schemas
  2) The first record schema in the union contains more fields than subsequent record schemas
  3) validate() is invoked with the union schema and a record of one of the subsequent record
schemas.

Below is a simple unit test which reproduces the exception.

  @Test
  public void testValidateUnion() {
      Schema type1Schema = SchemaBuilder.record("Type1")
          .fields()
          .requiredString("myString")
          .requiredInt("myInt")
          .endRecord();

      Schema type2Schema = SchemaBuilder.record("Type2")
          .fields()
          .requiredString("myString")
          .endRecord();

      Schema unionSchema = SchemaBuilder.unionOf()
          .type(type1Schema).and().type(type2Schema)
          .endUnion();

    GenericRecord record = new GenericData.Record(type2Schema);
    record.put("myString", "myValue");
    GenericData.get().validate(unionSchema, record);
  }

I'm happy to submit a JIRA for this issue, but thought I'd check in with the mailing list
before doing so.

Thanks,
Jeff
Mime
View raw message