[
https://issues.apache.org/jira/browse/AVRO-1590?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14152540#comment-14152540
]
Hudson commented on AVRO-1590:
------------------------------
SUCCESS: Integrated in AvroJava #483 (See
[https://builds.apache.org/job/AvroJava/483/])
AVRO-1590. Java: In resolving records in unions, permit structural and
shortname matches when fullname matching fails. Contributed by Ryan Blue.
(cutting: rev 1628335)
* /avro/trunk/CHANGES.txt
*
/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java
*
/avro/trunk/lang/java/avro/src/test/java/org/apache/avro/TestSchemaValidation.java
*
/avro/trunk/lang/java/avro/src/test/java/org/apache/avro/io/parsing/TestResolvingGrammarGenerator2.java
> [java] AllowNull causes unexpected resolution failure
> -----------------------------------------------------
>
> Key: AVRO-1590
> URL: https://issues.apache.org/jira/browse/AVRO-1590
> Project: Avro
> Issue Type: Bug
> Affects Versions: 1.7.7
> Reporter: Ryan Blue
> Assignee: Ryan Blue
> Fix For: 1.8.0
>
> Attachments: AVRO-1590-1.patch, AVRO-1590-2.patch, AVRO-1590-3.patch
>
>
> 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)