[ 
https://issues.apache.org/jira/browse/AVRO-2478?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Stan Rosenberg updated AVRO-2478:
---------------------------------
    Description: 
Builder classes generated from record.vm make use of RecordBuilderBase.validate 
in every setter to ensure that the passed value (primitive or composite) is 
compatible with the nullability of the corresponding Avro schema type.  The 
problem is the validation doesn't extend to composite types, namely Maps and 
Arrays.  This breaks the invariant that any record constructed via Builder is 
well-defined (i.e., can be serialized).

E.g., field of type array<string> would yield the following setter,
{code:java}
x.y.z.Builder setXXX(java.util.List<java.lang.String> value){code}
Thus, a collection with a null element will result in a record which breaks 
serialization, e.g.,
{code:java}
datumWriter.write(builder.setXXX(Collections.singletonList(null)).build()){code}

  was:Builder classes generated from record.vm make use of 
RecordBuilderBase.validate in every setter to ensure that the passed value 
(primitive or composite) is compatible with the nullability of the 
corresponding Avro schema type.  The problem is the validation doesn't extend 
to composite types, namely Maps and Arrays.  This breaks the invariant that any 
record constructed via Builder is well-defined (i.e., can be serialized).


> RecordBuilderBase.validate doesn't check nullability of composite types
> -----------------------------------------------------------------------
>
>                 Key: AVRO-2478
>                 URL: https://issues.apache.org/jira/browse/AVRO-2478
>             Project: Apache Avro
>          Issue Type: Bug
>          Components: java
>    Affects Versions: 1.9.0, 1.8.2
>            Reporter: Stan Rosenberg
>            Priority: Minor
>
> Builder classes generated from record.vm make use of 
> RecordBuilderBase.validate in every setter to ensure that the passed value 
> (primitive or composite) is compatible with the nullability of the 
> corresponding Avro schema type.  The problem is the validation doesn't extend 
> to composite types, namely Maps and Arrays.  This breaks the invariant that 
> any record constructed via Builder is well-defined (i.e., can be serialized).
> E.g., field of type array<string> would yield the following setter,
> {code:java}
> x.y.z.Builder setXXX(java.util.List<java.lang.String> value){code}
> Thus, a collection with a null element will result in a record which breaks 
> serialization, e.g.,
> {code:java}
> datumWriter.write(builder.setXXX(Collections.singletonList(null)).build()){code}



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)

Reply via email to