diff --git a/src/com/esotericsoftware/kryo/serializers/JavaSerializer.java b/src/com/esotericsoftware/kryo/serializers/JavaSerializer.java index 0a317ac88..3f6981004 100644 --- a/src/com/esotericsoftware/kryo/serializers/JavaSerializer.java +++ b/src/com/esotericsoftware/kryo/serializers/JavaSerializer.java @@ -84,8 +84,13 @@ private static class ObjectInputStreamWithKryoClassLoader extends ObjectInputStr protected Class resolveClass (ObjectStreamClass type) { try { return Class.forName(type.getName(), false, kryo.getClassLoader()); + } catch (ClassNotFoundException ignored) {} + try { + return super.resolveClass(type); } catch (ClassNotFoundException ex) { throw new KryoException("Class not found: " + type.getName(), ex); + } catch (IOException ex) { + throw new KryoException("Could not load class: " + type.getName(), ex); } } } diff --git a/test/com/esotericsoftware/kryo/serializers/JavaSerializerTest.java b/test/com/esotericsoftware/kryo/serializers/JavaSerializerTest.java index 5eb5ca591..e4ebc2a76 100644 --- a/test/com/esotericsoftware/kryo/serializers/JavaSerializerTest.java +++ b/test/com/esotericsoftware/kryo/serializers/JavaSerializerTest.java @@ -22,6 +22,8 @@ import com.esotericsoftware.kryo.KryoTestCase; import java.io.Serializable; +import java.net.URL; +import java.net.URLClassLoader; import org.junit.jupiter.api.Test; @@ -42,6 +44,17 @@ void testJavaSerializer () { roundTrip(146, test); } + @Test + void testJavaSerializerFallbackToDefaultClassLoader () { + kryo.setClassLoader(new URLClassLoader(new URL[]{}, null)); + + kryo.register(TestClass.class, new JavaSerializer()); + + TestClass test = new TestClass(); + test.intField = 54321; + roundTrip(139, test); + } + public static class TestClass implements Serializable { String stringField; int intField;