You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Francois Secherre (JIRA)" <ji...@apache.org> on 2015/08/10 13:20:46 UTC

[jira] [Created] (AVRO-1716) Java Schema Generated sources, non nullable, default defined fails on setField(null)

Francois Secherre created AVRO-1716:
---------------------------------------

             Summary: Java Schema Generated sources, non nullable, default defined fails on setField(null)
                 Key: AVRO-1716
                 URL: https://issues.apache.org/jira/browse/AVRO-1716
             Project: Avro
          Issue Type: Bug
          Components: java
    Affects Versions: 1.7.7
            Reporter: Francois Secherre


I define a schema descriptor like:

{code}
{
    "namespace": "some.namespace",
    "type": "record",
    "name": "SomeBean",
    "fields": [
        {"name": "someField", "type": "string", "default": ""},
    ]
}
{code}

Then I generate some java classes, using org.apache.avro:avro-maven-plugin. In the builder methods I will get the following:

{code}
    public some.namespace.SomeBean.Builder setSomeField(java.lang.CharSequence value) {
      validate(fields()[0], value);
      this.someField = value;
      fieldSetFlags()[0] = true;
      return this; 
    }
{code}

The Validate methode is like:

{code}
    protected void validate(Field field, Object value) {
        if(!isValidValue(field, value)) {
            if(field.defaultValue() == null) {
                throw new AvroRuntimeException("Field " + field + " does not accept null values");
            }
        }
    }
{code}

So if I perform SomeBean.setSomeField(null), as the defaultValue is defined, no exception will raise. However, someField will get a null value. That lead to the following type of error:

{code}
java.lang.NullPointerException: null of string in field someField of some.namespace.SomeBean	at org.apache.avro.generic.GenericDatumWriter.npe(GenericDatumWriter.java:93)
	at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:87)
	at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:58)
...
Caused by: java.lang.NullPointerException
	at org.apache.avro.io.Encoder.writeString(Encoder.java:121)
	at org.apache.avro.generic.GenericDatumWriter.writeString(GenericDatumWriter.java:213)
	at org.apache.avro.generic.GenericDatumWriter.writeString(GenericDatumWriter.java:208)
	at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:76)
	at org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:114)
	at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:104)
	at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:66)
	... 7 more
{code}




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)