Hello!  I can reproduce it in Avro 1.10.2, and I think this is a bug.
I raised https://issues.apache.org/jira/browse/AVRO-3091 to track it.
Thanks so much for the full example!

It looks like the workaround is to validate the defId in your own code
before building.  Until this is fixed, the newBuilder() won't catch
these errors (and I think it should).

Best regards, Ryan

On Tue, Mar 23, 2021 at 11:17 PM KV 59 <[email protected]> wrote:
>
> Hi,
> I have a schema defined as below
>
>> {
>>   "type" : "record",
>>   "name" : "DefRecord",
>>   "namespace" : "com.test.ns1",
>>   "doc" : "Message",
>>   "fields" : [ {
>>     "name" : "providerId",
>>     "type" : {
>>       "type" : "string",
>>       "avro.java.string" : "String"
>>     }
>>   }, {
>>     "name" : "defId",
>>     "type" : {
>>       "type" : "string",
>>       "avro.java.string" : "String"
>>     }
>>     "default" : ""
>>   }, {
>>     "name" : "text",
>>     "type" : [ "null", {
>>       "type" : "string",
>>       "avro.java.string" : "String"
>>     } ],
>>     "doc" : "the text",
>>     "default" : null
>>   }, {
>>     "name" : "count",
>>     "type" : "int",
>>     "doc" : "Number of segments in message",
>>     "default" : 0
>>   }, {
>>     "name" : "defBytes",
>>     "type" : "bytes",
>>     "default" : "ΓΏ"
>>   } ]
>> }
>
>
> I generated the classes using Java and using the builder tries to create an 
> object
>
> DefRecord defRecord = DefRecord.newBuilder()
>     .setProviderId("providerId")
>     .setCount(1)
>     .setDefId(null)
>     .build();
>
> The build runs successfully. (I expect this to fail as the field defId is not 
> nullable)
>
> When I serialize this object it throws a NullPointerException
>
> What I want to know is why the build is successful in the first place. 
> Shouldn't the build fail as we are trying to set a null value to a non 
> nullable field. Is there a reason for this behavior.
>
> Thanks
>

Reply via email to