[ https://issues.apache.org/jira/browse/AVRO-1532?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
O. Reißig updated AVRO-1532: ---------------------------- Attachment: RemovalOfUnionSubtype.java Thanks for your suggestion with AvroAlias, that's a lot better than my first try :-) Explicitly stating the schema does indeed resolve the issue with removed fields, but now I run into problems with union types. In my schema I have a Map containing an abstract type, that has several possible implementations via @Union. I'd like the rest of the serialized data to still be readable when removing one of the Union subtypes. I attached a test case to illustrate my example. In the real world, accessing the removed type would yield ClassCastException, but of course I cannot actually remove a class in this test case. As the stuff is stored in a Map, I should still be able to access the rest of the map entries. Did I make my use case clear? Is this realistic? Why actually store the schema inside the serialized file, if it is overridden anyway? I thought it's better to parse the serialized data with its according schema. > Field deletion not possible for ReflectData: NPE > ------------------------------------------------ > > Key: AVRO-1532 > URL: https://issues.apache.org/jira/browse/AVRO-1532 > Project: Avro > Issue Type: Bug > Components: java > Affects Versions: 1.7.6 > Reporter: O. Reißig > Labels: java, reflection > Attachments: AVRO-1532.patch, ReflectDataFieldRemovalTest.java, > ReflectDataFieldRemovalTest.java, RemovalOfUnionSubtype.java > > > *Actual behaviour:* > I have a field in my reflection-based schema like this: > {code} > @Nullable @AvroDefault("null") > public Long someField; > {code} > When removing this field, parsing the previous serialized blob yields > NullPointerException: > {noformat} > java.lang.NullPointerException > at org.apache.avro.reflect.ReflectData.setField(ReflectData.java:128) > at > org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:193) > at > org.apache.avro.reflect.ReflectDatumReader.readField(ReflectDatumReader.java:230) > at > org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:183) > at > org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:151) > at > org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:142) > at org.apache.avro.file.DataFileStream.next(DataFileStream.java:233) > at org.apache.avro.file.DataFileStream.next(DataFileStream.java:220) > at > ReflectDataFieldRemovalTest.testFieldRemoval(ReflectDataFieldRemovalTest.java:41) > {noformat} > *Expected behaviour:* > Field removal is crucial for schema evolution and must be possible with > ReflectData. -- This message was sent by Atlassian JIRA (v6.2#6252)