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)