diff --git a/java/fury-core/src/main/java/io/fury/resolver/ClassResolver.java b/java/fury-core/src/main/java/io/fury/resolver/ClassResolver.java index b79f474a5c..0b13f762f2 100644 --- a/java/fury-core/src/main/java/io/fury/resolver/ClassResolver.java +++ b/java/fury-core/src/main/java/io/fury/resolver/ClassResolver.java @@ -85,6 +85,7 @@ import io.fury.util.StringUtils; import io.fury.util.function.Functions; import java.io.Externalizable; +import java.io.IOException; import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; @@ -371,6 +372,12 @@ private void registerDefaultClasses() { register(EnumSet.allOf(Language.class).getClass()); register(EnumSet.of(Language.JAVA).getClass()); register(UnexistedMetaSharedClass.class, UnexistedSkipClass.class); + register(Throwable.class, StackTraceElement.class, Exception.class, RuntimeException.class); + register(NullPointerException.class); + register(IOException.class); + register(IllegalArgumentException.class); + register(IllegalStateException.class); + register(IndexOutOfBoundsException.class, ArrayIndexOutOfBoundsException.class); } /** register class. */ diff --git a/java/fury-core/src/test/java/io/fury/FuryTest.java b/java/fury-core/src/test/java/io/fury/FuryTest.java index 5fe7fc22b3..48314871d3 100644 --- a/java/fury-core/src/test/java/io/fury/FuryTest.java +++ b/java/fury-core/src/test/java/io/fury/FuryTest.java @@ -214,6 +214,12 @@ public void serializeBeanTest(boolean referenceTracking) { assertEquals(beanA, o); } + @Test + public void testSerializeException() { + Fury fury = Fury.builder().withLanguage(Language.JAVA).withRefTracking(true).build(); + fury.serialize(new Exception()); + } + @Test(dataProvider = "referenceTrackingConfig") public void registerTest(boolean referenceTracking) { Fury fury =