You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Zoltan Farkas (JIRA)" <ji...@apache.org> on 2017/09/14 17:59:00 UTC
[jira] [Comment Edited] (AVRO-1810) GenericDatumWriter broken with
Enum
[ 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)