Skip to content

[Java] cannot identify different Enum class #2720

@urlyy

Description

@urlyy

Search before asking

  • I had searched in the issues and found no similar issues.

Version

Latest

Component(s)

Java

Minimal reproduce step

enum Color {
  Green,
  Red,
  Blue,
  White,
}

enum Color2 {
    Green,
}

static class EnumWrapper {
  Color color;
}

static class EnumWrapper2 {
    Color2 color;
}

@Test
public void testEnumEnum() {
    Fory fory1 =
            Fory.builder()
                    .withLanguage(Language.XLANG)
                    .withCompatibleMode(CompatibleMode.COMPATIBLE)
                    .withCodegen(false)
                    .build();
    fory1.register(Color.class, 101);
    fory1.register(Color2.class, 102);
    fory1.register(EnumWrapper.class, 103);
    Fory fory2 =
            Fory.builder()
                    .withLanguage(Language.XLANG)
                    .withCompatibleMode(CompatibleMode.COMPATIBLE)
                    .withCodegen(false)
                    .build();
    fory2.register(Color.class, 101);
    fory2.register(Color2.class, 102);
    fory2.register(EnumWrapper2.class, 103);

    EnumWrapper enumWrapper = new EnumWrapper();
    enumWrapper.color = Color.White;
    byte[] serialize = fory1.serialize(enumWrapper);
    EnumWrapper2 wrapper2 = (EnumWrapper2) fory2.deserialize(serialize);
    Assert.assertEquals(Color2.Green, wrapper2.color);
}

What did you expect to see?

pass test

What did you see instead?


org.apache.fory.exception.DeserializationException: Failed to deserialize input

	at org.apache.fory.util.ExceptionUtils.handleReadFailed(ExceptionUtils.java:66)
	at org.apache.fory.Fory.deserialize(Fory.java:889)
	at org.apache.fory.Fory.deserialize(Fory.java:785)
	at org.apache.fory.RustXlangTest.testEnumEnum(RustXlangTest.java:390)
	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 org.testng.internal.invokers.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:136)
	at org.testng.internal.invokers.TestInvoker.invokeMethod(TestInvoker.java:658)
	at org.testng.internal.invokers.TestInvoker.invokeTestMethod(TestInvoker.java:219)
	at org.testng.internal.invokers.MethodRunner.runInSequence(MethodRunner.java:50)
	at org.testng.internal.invokers.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:923)
	at org.testng.internal.invokers.TestInvoker.invokeTestMethods(TestInvoker.java:192)
	at org.testng.internal.invokers.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
	at org.testng.internal.invokers.TestMethodWorker.run(TestMethodWorker.java:128)
	at java.util.ArrayList.forEach(ArrayList.java:1259)
	at org.testng.TestRunner.privateRun(TestRunner.java:808)
	at org.testng.TestRunner.run(TestRunner.java:603)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:429)
	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:423)
	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:383)
	at org.testng.SuiteRunner.run(SuiteRunner.java:326)
	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:95)
	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1249)
	at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
	at org.testng.TestNG.runSuites(TestNG.java:1092)
	at org.testng.TestNG.run(TestNG.java:1060)
	at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:65)
	at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:105)
Caused by: java.lang.IllegalArgumentException: Enum ordinal 3 not in [Green]
	at org.apache.fory.serializer.EnumSerializer.handleNonexistentEnumValue(EnumSerializer.java:122)
	at org.apache.fory.serializer.EnumSerializer.xread(EnumSerializer.java:112)
	at org.apache.fory.serializer.EnumSerializer.xread(EnumSerializer.java:32)
	at org.apache.fory.Fory.xreadNullable(Fory.java:1132)
	at org.apache.fory.serializer.SerializationBinding$XlangSerializationBinding.readNullable(SerializationBinding.java:396)
	at org.apache.fory.serializer.SerializationBinding$XlangSerializationBinding.readNullable(SerializationBinding.java:403)
	at org.apache.fory.serializer.AbstractObjectSerializer.readFinalObjectFieldValue(AbstractObjectSerializer.java:94)
	at org.apache.fory.serializer.MetaSharedSerializer.read(MetaSharedSerializer.java:194)
	at org.apache.fory.serializer.MetaSharedSerializer.xread(MetaSharedSerializer.java:261)
	at org.apache.fory.Fory.xreadNonRef(Fory.java:1121)
	at org.apache.fory.Fory.xreadRef(Fory.java:1056)
	at org.apache.fory.Fory.deserialize(Fory.java:883)
	... 29 more

Anything Else?

It seems that #2719 is wrong.

Are you willing to submit a PR?

  • I'm willing to submit a PR!

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions