[ https://issues.apache.org/jira/browse/AVRO-1810?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16166377#comment-16166377 ]
Zoltan Farkas edited comment on AVRO-1810 at 9/14/17 5:58 PM: -------------------------------------------------------------- The way I resolved this in my fork was to make the Generated enums implement org.apache.avro.generic.GenericEnumSymbol: https://github.com/zolyfarkas/avro/blob/trunk/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/enum.vm#L29 Also changed GenericEnumSymbol from: {code} /** An enum symbol. */ public interface GenericEnumSymbol extends GenericContainer, Comparable<GenericEnumSymbol> { /** Return the symbol. */ String toString(); } {code} to: {code} /** An enum symbol. */ public interface GenericEnumSymbol<T extends GenericEnumSymbol> extends GenericContainer, Comparable<T> { /** Return the symbol. */ String toString(); } {code} I can prepare a PR if this approach is OK with everyone. was (Author: zolyfarkas): The way I resolved this in my for was to make the Generated enums implement org.apache.avro.generic.GenericEnumSymbol: https://github.com/zolyfarkas/avro/blob/trunk/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/enum.vm#L29 Also changed GenericEnumSymbol from: {code} /** An enum symbol. */ public interface GenericEnumSymbol extends GenericContainer, Comparable<GenericEnumSymbol> { /** Return the symbol. */ String toString(); } {code} to: {code} /** An enum symbol. */ public interface GenericEnumSymbol<T extends GenericEnumSymbol> extends GenericContainer, Comparable<T> { /** Return the symbol. */ String toString(); } {code} I can prepare a PR if this approach is OK with everyone. > GenericDatumWriter broken with Enum > ----------------------------------- > > Key: AVRO-1810 > URL: https://issues.apache.org/jira/browse/AVRO-1810 > Project: Avro > Issue Type: Bug > Components: java > Affects Versions: 1.8.0 > Reporter: Ryon Day > Priority: Blocker > Fix For: 1.9.0, 1.8.4 > > > {panel:title=Description|titleBGColor=#3FA|bgColor=#DDD} > Using the GenericDatumWriter with either Generic OR SpecificRecord will break > if an Enum is present. > {panel} > {panel:title=Steps To Reproduce|titleBGColor=#8DB|bgColor=#DDD} > I have been tracking Avro decoding oddities for a while. > The tests for this issue can be found > [here|https://github.com/ryonday/avroDecodingHelp/blob/master/src/test/java/com/ryonday/test/Avro180EnumFail.java] > {panel} > {panel:title=Notes|titleBGColor=#3AF|bgColor=#DDD} > Due to the debacle that is the Avro "UTF8" object, we have been avoiding it > by using the following scheme: > * Write incoming records to a byte array using the GenericDatumWriter > * Read back the byte array to our compiled Java domain objects using a > SpecificDatumWriter > This worked great with Avro 1.7.7, and this is a binary-incompatable breaking > change with 1.8.0. > This would appear to be caused by an addition in the > {{GenericDatumWriter:163-164}}: > {code} > if (!data.isEnum(datum)) > throw new AvroTypeException("Not an enum: "+datum); > {code} > {panel} -- This message was sent by Atlassian JIRA (v6.4.14#64029)