avro-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Scott Carey (Commented) (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (AVRO-1007) Insufficient validation in generated specific record builder implementations
Date Wed, 08 Feb 2012 21:37:01 GMT

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

Scott Carey commented on AVRO-1007:
-----------------------------------

With this patch, the below tests are not consistent.  IMO these should all pass, or all fail.
 No record has a default, so if any of these were missing  during schema resolution it would
fail.  If we want the builder API to behave similar to schema resolution all should fail.
 If we want an unset field to behave as if it were set to null, then all should pass.

{code}
  Schema rec = new Schema.Parser().parse("{\"type\":\"record\", \"name\":\"Nothing\", \"fields\":["
+
      "{\"name\":\"blank\", \"type\": \"null\"}]}");
  Schema unionSchema = new Schema.Parser().parse("{\"type\":\"record\", \"name\":\"Person\",
\"fields\":[" +
  		"{\"name\":\"address\", \"type\": [\"null\", \"string\"]}]}");
  Schema unionSchema2 = new Schema.Parser().parse("{\"type\":\"record\", \"name\":\"Person\",
\"fields\":[" +
      "{\"name\":\"address\", \"type\": [\"string\",\"null\"]}]}");
  
  @Test
  public void buildNoFieldSet() {
    new GenericRecordBuilder(rec).build();
  }
  
  @Test
  public void buildNoFieldSetUnion() {
    new GenericRecordBuilder(unionSchema).build();
  }
  
  @Test
  public void buildNoFieldSetUnion2() {
    new GenericRecordBuilder(unionSchema2).build();
  }
{code}
                
> 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

        

Mime
View raw message