Sean Winard created FLINK-4977:
----------------------------------
Summary: Enum serialization does not work properly
Key: FLINK-4977
URL:
https://issues.apache.org/jira/browse/FLINK-4977 Project: Flink
Issue Type: Bug
Affects Versions: 1.1.3
Environment: Java SE 1.8.0_91
Ubuntu 14.04.4 LTS (trusty)
Reporter: Sean Winard
Priority: Minor
Enums produce serialization failures whether they are by themselves or part of a POJO in the stream. I've tried running in IntelliJ IDEA and also via {{flink run}}. Here is a small program to reproduce:
{code:java}
package org.apache.flink.testenum;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
public class TestEnumStream {
private enum MyEnum {
NONE, SOMETHING, EVERYTHING
}
public static void main(String[] args) {
final StreamExecutionEnvironment environment = StreamExecutionEnvironment.getExecutionEnvironment();
environment.setParallelism(1);
environment.fromElements(MyEnum.NONE, MyEnum.SOMETHING, MyEnum.EVERYTHING)
.addSink(x -> System.err.println(x.name()));
}
}
{code}
{noformat}
Exception in thread "main" java.lang.RuntimeException: Cannot access the constants of the enum org.apache.flink.testenum.TestEnumStream$MyEnum
at org.apache.flink.api.common.typeutils.base.EnumSerializer.createValues(EnumSerializer.java:132)
at org.apache.flink.api.common.typeutils.base.EnumSerializer.<init>(EnumSerializer.java:43)
at org.apache.flink.api.java.typeutils.EnumTypeInfo.createSerializer(EnumTypeInfo.java:101)
at org.apache.flink.streaming.api.environment.StreamExecutionEnvironment.fromCollection(StreamExecutionEnvironment.java:773)
at org.apache.flink.streaming.api.environment.StreamExecutionEnvironment.fromElements(StreamExecutionEnvironment.java:674)
{noformat}
I took a look at that line in EnumSerializer.java and swapped out the reflection on the "values" method for the simpler `enumClass.getEnumConstants()`, and that seems to work after I install my custom flink-core jar. I believe this is because [
http://docs.oracle.com/javase/tutorial/reflect/special/enumMembers.html] specifically states you cannot reflect on the "values" method since it is implicitly generated at compile type.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)