Skip to content

Commit

Permalink
[Java] fix write replace class failure (#767)
Browse files Browse the repository at this point in the history
fix write replace class failure
  • Loading branch information
chaokunyang authored Jul 26, 2023
1 parent d018008 commit 5da7157
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
4 changes: 3 additions & 1 deletion java/fury-core/src/main/java/io/fury/resolver/ClassInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,9 @@ public class ClassInfo {
} else {
this.fullClassNameBytes = null;
}
if (cls != null && classId == ClassResolver.NO_CLASS_ID) {
if (cls != null
&& (classId == ClassResolver.NO_CLASS_ID || classId == ClassResolver.REPLACE_STUB_ID)) {
// REPLACE_STUB_ID for write replace class in `ClassSerializer`.
String packageName = ReflectionUtils.getPackage(cls);
this.packageNameBytes = enumStringResolver.getOrCreateEnumStringBytes(packageName);
this.classNameBytes =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,9 @@
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.Currency;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
Expand Down Expand Up @@ -182,8 +184,26 @@ public void testUUID() {

private static class TestClassSerialization {}

private static class TestReplaceClassSerialization {
private Object writeReplace() {
return 1;
}
}

@Test
public void testClass() {
serDeCheckSerializer(getJavaFury(), TestClassSerialization.class, "ClassSerializer");
public void testSerializeClass() {
Fury fury = Fury.builder().withLanguage(Language.JAVA).disableSecureMode().build();
// serialize both TestReplaceClassSerialization object and class.
// Scala `object` native serialization will return ModuleSerializationProxy will write original
// class.
List<Object> list =
serDe(
fury,
Arrays.asList(
new TestReplaceClassSerialization(), TestReplaceClassSerialization.class));
assertEquals(list.get(1), TestReplaceClassSerialization.class);
serDeCheckSerializer(fury, TestClassSerialization.class, "ClassSerializer");
serDeCheckSerializer(fury, TestReplaceClassSerialization.class, "ClassSerializer");
serDe(fury, new TestReplaceClassSerialization());
}
}

0 comments on commit 5da7157

Please sign in to comment.