avro-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Xander Uiterlinden <uiter...@gmail.com>
Subject Does the builder of generated specific record's Java class handle nested Avro objects correctly?
Date Wed, 06 Aug 2014 14:17:56 GMT

I wonder if I'm running into a bug with builders for specific records here.
I'm using the Builder of a specific record to create a new instance of that
record with the same properties. See the following schema's:

{"namespace": "test.model",
 "type": "record",
 "name": "Address",
 "fields": [
     {"name": "street", "type": "string"},
 {"name": "number", "type": [ "int", "null" ]},
 {"name": "city", "type" : [ "string", "null" ]},
     {"name": "country",  "type": { "name" : "Country", "type" : "enum",
"symbols": [ "NL", "BE", "UK", "DE" ]}}


{"namespace": "test.model",
 "type": "record",
 "name": "User",
 "fields": [
   {"name": "identifier", "type": "string"},
     {"name": "name", "type": "string"},
     {"name": "number",  "type": ["int", "null"]},
     {"name": "color", "type": ["string", "null"]},
   {"name": "address", "type": ["test.model.Address", "null"] },
 {"name": "properties", "type": [ {"type": "map", "values": "string"} ,
"null"], "values": "string" }

I generated Java objects for these and I'm creating new objects using the
following code:

Address address = new Address("street", 10, "city", Country.NL);

User user = new User("1", "Xander",
10, "green", address, new HashMap<String, String>());
So I'm creating a user which has a reference to an Address. When I try to
create a 'copy' of this object using the builder:

User copy = User.newBuilder(user).build();

This results in a ClassCastException:

java.lang.ClassCastException: org.apache.avro.generic.GenericData$Record
cannot be cast to graph.test.model.Address

at test.model.User$Builder.<init>(User.java:240)

at test.model.User$Builder.<init>(User.java:221)

at test.model.User.newBuilder(User.java:170)

Am I not using the builder the way it's meant to be used, or did I run into
a bug here ?



View raw message