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

Alfonso Nishikawa updated AVRO-1600:
------------------------------------
    Description: 
The behavior of {{GenericData#getDefaultValue(Field)}} when the default value 
is not defined in the schema is to throw an AvroRuntimeException.
The javadoc comment states that should return {{null}} in this case. [This can 
be seen 
here|http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java?view=markup#l872]:
{code}
  /**
   * Gets the default value of the given field, if any.
   * @param field the field whose default value should be retrieved.
   * @return the default value associated with the given field, 
   * or null if none is specified in the schema.
   */
  @SuppressWarnings({ "rawtypes", "unchecked" })
  public Object getDefaultValue(Field field) {    
    JsonNode json = field.defaultValue();
    if (json == null)
      throw new AvroRuntimeException("Field " + field
                                     + " not set and has no default value");
{code}

This behavior affects {{RecordBuilderBase#defaultValue(Field)}} which expects a 
null too, [as stated in it's javadoc 
comment|http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/data/RecordBuilderBase.java?view=markup#l125]:

{code}
  /**
   * Gets the default value of the given field, if any.
   * @param field the field whose default value should be retrieved.
   * @return the default value associated with the given field, 
   * or null if none is specified in the schema.
   * @throws IOException 
   */
  @SuppressWarnings({ "rawtypes", "unchecked" })
  protected Object defaultValue(Field field) throws IOException {    
    return data.deepCopy(field.schema(), data.getDefaultValue(field));
  }
{code}

Fix options:

* Modify the javadoc to comment it throws a runtime exception (and people 
should take this into account).
* Modify the method to return a null as stated in the javadoc comment.
* Modify the method to return null when the field is nullable and the default 
value is not defined, and update javadoc. (was this the original intended 
behavior?)



  was:
The behavior of {{GenericData#getDefaultValue(Field)}} when the default value 
is not defined in the schema is to throw an AvroRuntimeException.
The javadoc comment states that should return {{null}} in this case. [This can 
be seen 
here|http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java?view=markup#l872]:
{code}
  /**
   * Gets the default value of the given field, if any.
   * @param field the field whose default value should be retrieved.
   * @return the default value associated with the given field, 
   * or null if none is specified in the schema.
   */
  @SuppressWarnings({ "rawtypes", "unchecked" })
  public Object getDefaultValue(Field field) {    
    JsonNode json = field.defaultValue();
    if (json == null)
      throw new AvroRuntimeException("Field " + field
                                     + " not set and has no default value");
{code}

This behavior affects {{RecordBuilderBase#defaultValue(Field)}} which expects a 
null too, [as stated in it's javadoc 
comment|http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/data/RecordBuilderBase.java?view=markup#l125]:

{code}
  /**
   * Gets the default value of the given field, if any.
   * @param field the field whose default value should be retrieved.
   * @return the default value associated with the given field, 
   * or null if none is specified in the schema.
   * @throws IOException 
   */
  @SuppressWarnings({ "rawtypes", "unchecked" })
  protected Object defaultValue(Field field) throws IOException {    
    return data.deepCopy(field.schema(), data.getDefaultValue(field));
  }
{code}

Fix options:

* Modify the javadoc to comment it throws a runtime exception (and people 
should take this into account).
* Modify the method to return a null as stated in the javadoc comment.




> GenericData#getDefaultValue(Field) behavior inconsistent with javadoc comment 
> when default value is not defined
> ---------------------------------------------------------------------------------------------------------------
>
>                 Key: AVRO-1600
>                 URL: https://issues.apache.org/jira/browse/AVRO-1600
>             Project: Avro
>          Issue Type: Bug
>          Components: java
>    Affects Versions: 1.7.4, 1.7.7
>            Reporter: Alfonso Nishikawa
>            Priority: Trivial
>
> The behavior of {{GenericData#getDefaultValue(Field)}} when the default value 
> is not defined in the schema is to throw an AvroRuntimeException.
> The javadoc comment states that should return {{null}} in this case. [This 
> can be seen 
> here|http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java?view=markup#l872]:
> {code}
>   /**
>    * Gets the default value of the given field, if any.
>    * @param field the field whose default value should be retrieved.
>    * @return the default value associated with the given field, 
>    * or null if none is specified in the schema.
>    */
>   @SuppressWarnings({ "rawtypes", "unchecked" })
>   public Object getDefaultValue(Field field) {    
>     JsonNode json = field.defaultValue();
>     if (json == null)
>       throw new AvroRuntimeException("Field " + field
>                                      + " not set and has no default value");
> {code}
> This behavior affects {{RecordBuilderBase#defaultValue(Field)}} which expects 
> a null too, [as stated in it's javadoc 
> comment|http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/data/RecordBuilderBase.java?view=markup#l125]:
> {code}
>   /**
>    * Gets the default value of the given field, if any.
>    * @param field the field whose default value should be retrieved.
>    * @return the default value associated with the given field, 
>    * or null if none is specified in the schema.
>    * @throws IOException 
>    */
>   @SuppressWarnings({ "rawtypes", "unchecked" })
>   protected Object defaultValue(Field field) throws IOException {    
>     return data.deepCopy(field.schema(), data.getDefaultValue(field));
>   }
> {code}
> Fix options:
> * Modify the javadoc to comment it throws a runtime exception (and people 
> should take this into account).
> * Modify the method to return a null as stated in the javadoc comment.
> * Modify the method to return null when the field is nullable and the default 
> value is not defined, and update javadoc. (was this the original intended 
> behavior?)



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

Reply via email to