Ryan Blue created AVRO-1590:
-------------------------------

             Summary: AllowNull 
                 Key: AVRO-1590
                 URL: https://issues.apache.org/jira/browse/AVRO-1590
             Project: Avro
          Issue Type: Bug
            Reporter: Ryan Blue


If I try to read data serialized with a hand-written schema using a reflected 
schema generated by AllowNull, even though all of the individual types can be 
read. Here is a failing test:

{code:java}
  public static class Point {
    double x;
    double y;
  }

  public static class Circle {
    Point center;
    double radius;
  }

  @Test
  public void testAllowNull() throws Exception {
    new SchemaValidatorBuilder()
        .canBeReadStrategy()
        .validateLatest().validate(
        SchemaBuilder.record("Circle").fields()
            .name("center").type().record("Point").fields()
            .requiredDouble("x")
            .requiredDouble("y")
            .endRecord().noDefault()
            .requiredDouble("radius")
            .endRecord(),
        Arrays.asList(ReflectData.AllowNull.get().getSchema(Circle.class)));
  }
{code}

The problem is that the {{ResolvingGrammarGenerator}} can't resolve a record 
with a nullable record unless the two have the same [full 
name|https://github.com/apache/avro/blob/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java#L439].

It is more work, but I think the check should be whether there is a readable 
record in the union. Another alternative is to special case a nullable union 
and allow the record-level resolution only in that case.



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

Reply via email to