Home | About | Sematext search-lucene.com search-hadoop.com
 Search Hadoop and all its subprojects:

Switch to Threaded View
Avro, mail # user - explicit schema verification?

Copy link to this message
Re: explicit schema verification?
James Baldassari 2011-09-07, 20:40
Hi Yang,

If you use the new Builder interface in trunk you'll get a slightly more
helpful error message.  When using a record builder, if you invoke build()
on it and you haven't set some non-nullable field (and it doesn't have a
default value), you'll get an AvroRuntimeException with the message "Field
[field name] does not accept null values."  This feature hasn't been
included in an Avro release yet, but this might be useful to you in the
future.  Here's a quick example:

// The protocol:
protocol People {
  record Person {
    string name;
    int year_of_birth;

// Using the Builder
Person.newBuilder().setName("James").build();  // will throw

That line would throw an AvroRuntimeException because the non-nullable field
year_of_birth was not specified.  The message in the exception would say
"Field year_of_birth does not accept null values."

We could perhaps have a new exception type that would be a subclass of
AvroRuntimeException and would be thrown specifically when a non-nullable
field is undefined, for example NonNullableFieldException.  That way your
code could catch only that exception type while letting other
AvroRuntimeExceptions propagate up the stack.  If you think this would be a
useful feature, go ahead and file a JIRA.  The code change would be trivial.

On Wed, Sep 7, 2011 at 4:17 PM, Yang <[EMAIL PROTECTED]> wrote:

> when we declare some fields in a record, it's assumed to be mandatory
> unless we specify it with a union {original_type, null}.
> this feature is actually very useful to me: I declare a schema, and if some
> new user creates a record, but fails to populate some mandatory field, I
> want some mechanism to throw an exception.
> currently I get this feature "by accident": if the user misses some
> mandatory fields, when I send this record as a param to some RPC method, or
> when I serialize it through SpecificDatumWriter, Avro throws a
> NULLPointerException.  I can catch this and let user know that it's due to
> lack of mandatory fields.
> but instead of NPE, could we make Avro throw a more explicit exception, so
> it's more descriptive?
> Thanks
> Yang