avro-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gavin YAO <gavin.ming....@gmail.com>
Subject Re: How represent abstract in Schemas
Date Tue, 08 May 2012 02:56:22 GMT
Hi Scott:
            Thank you very much for the reply. I have got it.

2012/5/8 Scott Carey <scottcarey@apache.org>

> Avro schemas can represent Union types, but not abstract types.  It does
> not make sense to serialize an abstract class, since its data members are
> not known.
> By definition, an abstract type does not define all of the possible sub
> types in advance, which presents another problem -- in order to make sense
> of serialized data, the universe of types serialized need to be known.
> You can model an abstract type with union types with a little bit of work.
>  For example, if you have type AbstractThing, with children Concrete1 and
> Concrete2, you can serialize these as a union of Concrete1 and Concrete2.
>  When reading the element with this union, you will need to check the
> instance type at runtime and cast or if you know the super type is
> AbstractThing, you can blindly cast to AbstractThing.  As new types are
> added, your schema will change to include more branches in the union.  If
> you remove a type, you will need to provide a default in case the removed
> type is encountered  while reading data.
> If you are using the Java Specific API the above will not work without
> wrapper classes that contain the hierarchy, and the ability to create these
> from the serialized types.
> Serialization deals only with data stored in member variables, and
> interfaces have no data.  An Avro Protocol maps to a Java Interface, but it
> is never serialized, it represents a contract for exchanging serialized
> data.
> -Scott
> On 5/6/12 9:55 PM, "Gavin YAO" <gavin.ming.yao@gmail.com> wrote:
> Hello:
>         I am very new to the Apache Avro community so I hope I am doing
> right in just sending a mail to this address.
>         Is it possible to represent abstract as in Java language we can do
> it by abstract class or interface?
> Thanks a lot!

View raw message