[prev in list] [next in list] [prev in thread] [next in thread]
List: avro-dev
Subject: [jira] [Commented] (AVRO-2149) Using GenericDatumWriter for writing GenericRecord with schema from t
From: "Doug Cutting (JIRA)" <jira () apache ! org>
Date: 2018-02-22 16:33:00
Message-ID: JIRA.13140125.1519285290000.252695.1519317180161 () Atlassian ! JIRA
[Download RAW message or body]
[ https://issues.apache.org/jira/browse/AVRO-2149?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16373035#comment-16373035 \
]
Doug Cutting commented on AVRO-2149:
------------------------------------
By "generated type" you mean an enum class definition generated by Avro's specific \
compiler? If so, then you should use SpecificDatumReader instead. \
GenericDatumReader works for the generic data model. SpecificDatumReader works for \
classes generated by the specific compiler (and generic data, because it inherits \
from GenericDatumReader). ReflectDatumReader works for most POJO classes (plus \
specific & generic).
> Using GenericDatumWriter for writing GenericRecord with schema from the specified \
> generated type
> ------------------------------------------------------------------------------------------------
>
> Key: AVRO-2149
> URL: https://issues.apache.org/jira/browse/AVRO-2149
> Project: Avro
> Issue Type: Improvement
> Components: java
> Affects Versions: 1.8.2
> Reporter: Wojciech Sroka
> Priority: Major
>
> Currently using GenericDatumWriter for writing GenericRecord with schema from the \
> specified generated type cause exception when one of fields is enum type: \
> {code:java} Exception in thread "main" \
> org.apache.avro.file.DataFileWriter$AppendWriteException: \
> org.apache.avro.AvroTypeException: Not an enum: YELLOW at \
> org.apache.avro.file.DataFileWriter.append(DataFileWriter.java:308) at \
> pl.ingbank.kafka.AvroErrorTester.runGenericWriterReaderTest(AvroErrorTester.java:65)
> at pl.ingbank.kafka.AvroErrorTester.main(AvroErrorTester.java:27)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:498)
> at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
> Caused by: org.apache.avro.AvroTypeException: Not an enum: YELLOW
> at org.apache.avro.generic.GenericDatumWriter.writeEnum(GenericDatumWriter.java:195)
> at org.apache.avro.generic.GenericDatumWriter.writeWithoutConversion(GenericDatumWriter.java:128)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:75)
> at org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:177)
> at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:167)
> at org.apache.avro.generic.GenericDatumWriter.writeWithoutConversion(GenericDatumWriter.java:118)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:75)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:62)
> at org.apache.avro.file.DataFileWriter.append(DataFileWriter.java:302)
> ... 7 more{code}
> It is caused by method protected void writeEnum(Schema schema, Object datum, \
> Encoder out) in class org.apache.avro.generic.GenericDatumWriter: {code:java}
> protected void writeEnum(Schema schema, Object datum, Encoder out) throws \
> IOException { if (!data.isEnum(datum)) {
> throw new AvroTypeException("Not an enum: " + datum);
> }
> out.writeEnum(schema.getEnumOrdinal(datum.toString()));
> }{code}
> Fix for this is to add additional check does datum is enum type:
> {code:java}
> protected void writeEnum(Schema schema, Object datum, Encoder out) throws \
> IOException { if(datum.getClass().isEnum() && !data.isEnum(datum)){
> throw new AvroTypeException("Not an enum: " + datum);
> }
> out.writeEnum(schema.getEnumOrdinal(datum.toString()));
> }
> {code}
> This fix alows to serialize and deserialize generic record with schema from the \
> specified generated type.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic