Closed
Description
Search before asking
- I had searched in the issues and found no similar issues.
Version
java v0.9.0
Component(s)
Java
Minimal reproduce step
BaseFury s = FuryFury.builder()
.withLanguage(Language.JAVA)
.withRefTracking(true)
.withIntCompressed(true)
.withLongCompressed(true)
.withStringCompressed(true)
.withCompatibleMode(CompatibleMode.COMPATIBLE)
.requireClassRegistration(false)
.withAsyncCompilation(true)
.serializeEnumByName(true)
.buildThreadSafeFury()
public class PrivateFliedClassNumberOne {
private boolean privateBoolean = true;
private int privateInt = 10;
private String privateString = "notNull";
private Map<String, String> privateMap = Map.of("a", "b");
private List<String> privateList = List.of("l");
private PrivateFieldSubClass privateFieldSubClass = new PrivateFieldSubClass();
}
public class PrivateFliedClassNumberTwoWithMissingField {
private Map<String, String> privateMap = Map.of("a", "b");
private int privateInt = 10;
private PrivateFieldSubClass privateFieldSubClass = new PrivateFieldSubClass();
private List<String> privateList = List.of("l");
private boolean privateBoolean = true;
}
code to repro
PrivateFliedClassNumberOne privateField = new PrivateFliedClassNumberOne();
byte[] serialized = s.serializeJavaObject(privateField);
PrivateFliedClassNumberTwoWithMissingField privateField2 = s.deserializeJavaObject(
serialized,
PrivateFliedClassNumberTwoWithMissingField.class
);
What did you expect to see?
Should be able to deserialize successfully
What did you see instead?
exception
Deserialize failed, read objects are: [PrivateFliedClassNumberTwoWithMissingField{privateMap={a=b}, privateInt=10, privateFieldSubClass=true, privateList=[l], privateBoolean=true}]
at org.apache.fury.util.ExceptionUtils.handleReadFailed(ExceptionUtils.java:63)
at org.apache.fury.Fury.deserializeJavaObject(Fury.java:1124)
at org.apache.fury.Fury.deserializeJavaObject(Fury.java:1101)
at org.apache.fury.ThreadLocalFury.deserializeJavaObject(ThreadLocalFury.java:202)
at serde.SerdeTestBase.testBasicPrivateField_diffClassScrambledField(SerdeTestBase.java:89)
at serde.SerdeTestBase.runAll(SerdeTestBase.java:35)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:104)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:645)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:851)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1177)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
at org.testng.TestRunner.privateRun(TestRunner.java:756)
at org.testng.TestRunner.run(TestRunner.java:610)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:387)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:382)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
at org.testng.SuiteRunner.run(SuiteRunner.java:289)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1293)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1218)
at org.testng.TestNG.runSuites(TestNG.java:1133)
at org.testng.TestNG.run(TestNG.java:1104)
at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:65)
at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:105)
Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 111 out of bounds for length 6
at org.apache.fury.collection.ObjectArray.set(ObjectArray.java:58)
at org.apache.fury.resolver.MapRefResolver.setReadObject(MapRefResolver.java:209)
at org.apache.fury.Fury.readRef(Fury.java:875)
at org.apache.fury.serializer.ObjectSerializer.readContainerFieldValue(ObjectSerializer.java:385)
at org.apache.fury.serializer.ObjectSerializer.readAndSetFields(ObjectSerializer.java:318)
at org.apache.fury.serializer.ObjectSerializer.read(ObjectSerializer.java:246)
at org.apache.fury.Fury.readDataInternal(Fury.java:959)
at org.apache.fury.Fury.deserializeJavaObject(Fury.java:1118)
... 30 more
Anything Else?
this is the first time i encounter this issue.
i was using fury v0.5.1 and doesnt have this kind of problem. i am also tried to repro this on 0.5.1, but its not happening on that version.
Are you willing to submit a PR?
- I'm willing to submit a PR!