Hello Ryan, Below example illustrates the problem with more details. It seem to cause issues when the enum is a property of another POJO. package com.avro.test;
import lombok.Builder; import lombok.Data; import org.apache.avro.io.Encoder; import org.apache.avro.io.EncoderFactory; import org.apache.avro.reflect.ReflectData; import org.apache.avro.reflect.ReflectDatumWriter; import java.io.ByteArrayOutputStream; import java.io.IOException; public class AvroTest { public static void main(String[] args) { Pojo pojo = Pojo.builder().testEnum(TestEnum.K).build(); serialize(pojo); } public static byte[] serialize(Pojo object) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); Encoder encoder = EncoderFactory.get().binaryEncoder(baos, null); ReflectDatumWriter<Pojo> rdw = new ReflectDatumWriter<Pojo>(Pojo.class, ReflectData.AllowNull.get()); try { rdw.write(object, encoder); encoder.flush(); } catch (IOException e) { e.printStackTrace(); } return baos.toByteArray(); } @Data @Builder public static class Pojo { private TestEnum testEnum; } enum TestEnum { V { @Override public boolean is_V() { return true; } }, K { @Override public boolean is_K() { return true; } }; public boolean is_V() { return false; } public boolean is_K() { return false; } } } > On 30-Jun-2021, at 8:59 PM, Ryan Skraba <r...@skraba.com> wrote: > > Hello! I'm pretty sure that I've used enums with implementations and > ReflectData successfully, even with old versions of Avro. > > It seems to work with 1.9.x+ with the following ReflectDatumWriter > (where datum is an instance of the TestEnum): > > Encoder encoder = EncoderFactory.get().binaryEncoder(baos, null); > DatumWriter<T> w = new > ReflectDatumWriter<>(ReflectData.get().getSchema(TestEnum.class)); > w.write(datum, encoder); > encoder.flush(); > > Do you have any extra detail about how you're constructing the > ReflectDatumWriter or getting the schema for the TestEnum? > > On Fri, Jun 25, 2021 at 9:39 AM Swamy Thota <swamy...@gmail.com> wrote: >> >> Hi All, >> >> I’m seeing an issue with ReflectDatumWriter when the enum implements methods >> as below: >> >> enum TestEnum { >> V{ >> @Override >> public boolean is_V(){ >> return true; >> } >> } >> >> K{ >> @Override >> public boolean is_K(){ >> return true; >> } >> } >> >> public boolean is_V(){ >> return false; >> } >> >> public boolean is_K(){ >> return false; >> } >> } >> >> This type of enums are failing with SchemaParseException: Empty name. Is >> there any work around or a fix available, appreciate the help in advance. >> >> Thanks, >> Swamy