From de18f74c53603beed7ff79091934d7189ac82131 Mon Sep 17 00:00:00 2001 From: seonwoo_jung Date: Mon, 25 May 2026 12:14:35 +0900 Subject: [PATCH] Expose ClassLoader from DefaultDeserializer Add a public accessor for the ClassLoader configured on a DefaultDeserializer instance so that callers no longer need to read the private field via reflection in order to forward it to a ConfigurableObjectInputStream subclass. See gh-36827 Closes gh-36833 Signed-off-by: seonwoo_jung (cherry picked from commit f7be796c1cd47e9addee4265e7e63a24a73a7689) --- .../core/serializer/DefaultDeserializer.java | 12 ++++++++++++ .../core/serializer/SerializerTests.java | 11 +++++++++++ 2 files changed, 23 insertions(+) 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());