[
https://issues.apache.org/jira/browse/AVRO-1810?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15190164#comment-15190164
]
Sean Busbey commented on AVRO-1810:
-----------------------------------
This looks like an impedance mismatch between the Generic and Specific APIs.
The Specific API generates bare java enums for avro enum types, while the
Generic API now requires GenericEnumSymbol. (technically the switch to
GenericEnumSymbol happened in 1.4.0, but enforcement has been inconsistent.)
Short term, the
{{genericDatumWriter_failsForGenericRecord_populatedWithRawEnum}} test can be
fixed similar to the string one by wrapping things in GenericData.EnumSymbol.
It looks like the root cause for your helper utility is that SpecificRecordBase
claims to implement GenericRecord, but then returns the raw java enums for the
two avro enum fields rather than the correct o.a.avro.generic type.
> 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
>
> {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.3.4#6332)