[ 
https://issues.apache.org/jira/browse/AVRO-1007?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13203928#comment-13203928
 ] 

Doug Cutting commented on AVRO-1007:
------------------------------------

According to the spec, that schema is malformed.  The default value of a union 
should always be interpreted as the first type in the union.

I don't think this schema currently works when reading records that lack the 
field "f".  See line 348 of ResovlingGrammarGenerator, where the default value 
is encoded using the first type in the union.

I suppose we could change the spec to permit a null default value if any 
element of the union is null, but I don't see why we should.  It makes the spec 
more complex and doesn't provide any additional expressive power.

This patch would make the builder API enforce the spec, consistent with 
ResolvingDecoder.
                
> Insufficient validation in generated specific record builder implementations
> ----------------------------------------------------------------------------
>
>                 Key: AVRO-1007
>                 URL: https://issues.apache.org/jira/browse/AVRO-1007
>             Project: Avro
>          Issue Type: Bug
>    Affects Versions: 1.6.1
>            Reporter: James Baldassari
>            Assignee: James Baldassari
>              Labels: java
>             Fix For: 1.6.2
>
>         Attachments: AVRO-1007-v2.patch, AVRO-1007-v3.patch, 
> AVRO-1007-v4.patch, AVRO-1007.patch, AVRO-1007.patch, AVRO-1007.patch
>
>
> The are two main problems with the generated build() method in specific 
> record builders:
> * For non-primitive types, if there is no default value and the user does not 
> set the value, build() will execute successfully without throwing an exception
> ** Instead, an AvroRuntimeException should be thrown with an exception 
> message indicating the name of the required field that was not set
> * For primitive types, if there is no default value and the user does not set 
> the value, an AvroRuntimeException is thrown with the 'cause' set to a 
> NullPointerException, which is not very helpful
> ** The NPE comes from attempting to set the primitive field to the result of 
> defaultValue(), which is null

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to