diff --git a/spring-core/src/main/java/org/springframework/core/serializer/DefaultDeserializer.java b/spring-core/src/main/java/org/springframework/core/serializer/DefaultDeserializer.java index 44faec7c3db..264caeed092 100644 --- a/spring-core/src/main/java/org/springframework/core/serializer/DefaultDeserializer.java +++ b/spring-core/src/main/java/org/springframework/core/serializer/DefaultDeserializer.java @@ -59,6 +59,18 @@ public class DefaultDeserializer implements Deserializer { } + /** + * Return the {@link ClassLoader} to use for deserialization, or {@code null} + * to use the "latest user-defined ClassLoader" of {@link ObjectInputStream}. + * @since 7.1 + * @see ConfigurableObjectInputStream#ConfigurableObjectInputStream(InputStream, ClassLoader) + */ + @Nullable + public ClassLoader getClassLoader() { + return this.classLoader; + } + + /** * Read from the supplied {@code InputStream} and deserialize the contents * into an object. diff --git a/spring-core/src/test/java/org/springframework/core/serializer/SerializerTests.java b/spring-core/src/test/java/org/springframework/core/serializer/SerializerTests.java index 1d58c07036b..d72ef32f8e9 100644 --- a/spring-core/src/test/java/org/springframework/core/serializer/SerializerTests.java +++ b/spring-core/src/test/java/org/springframework/core/serializer/SerializerTests.java @@ -78,6 +78,17 @@ class SerializerTests { assertThat(deserializer.expectedInputStream).isNotNull(); } + @Test + void defaultDeserializerExposesNullClassLoaderByDefault() { + assertThat(new DefaultDeserializer().getClassLoader()).isNull(); + } + + @Test + void defaultDeserializerExposesConfiguredClassLoader() { + ClassLoader classLoader = getClass().getClassLoader(); + assertThat(new DefaultDeserializer(classLoader).getClassLoader()).isSameAs(classLoader); + } + @Test void serializationDelegateWithExplicitSerializerAndDeserializer() throws IOException { SerializationDelegate delegate = new SerializationDelegate(new DefaultSerializer(), new DefaultDeserializer());