From f7be796c1cd47e9addee4265e7e63a24a73a7689 Mon Sep 17 00:00:00 2001 From: seonwoo_jung Date: Mon, 25 May 2026 12:14:35 +0900 Subject: [PATCH 1/2] 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 --- .../core/serializer/DefaultDeserializer.java | 11 +++++++++++ .../core/serializer/SerializerTests.java | 11 +++++++++++ 2 files changed, 22 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 1e0f0fe9429..f183c95b353 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,17 @@ 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) + */ + public @Nullable 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 d3960c4f0ff..26963d069da 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()); From 6e122d3aaa5b3ee4c72d28a434efcec1b6515612 Mon Sep 17 00:00:00 2001 From: Sam Brannen <104798+sbrannen@users.noreply.github.com> Date: Tue, 26 May 2026 16:39:30 +0200 Subject: [PATCH 2/2] Polish contribution See gh-36833 --- .../springframework/core/serializer/DefaultDeserializer.java | 4 ++-- .../org/springframework/core/serializer/SerializerTests.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) 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 f183c95b353..5a3d760edd1 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 @@ -61,8 +61,8 @@ 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 + * to use the "latest user-defined ClassLoader". + * @since 6.2.19 * @see ConfigurableObjectInputStream#ConfigurableObjectInputStream(InputStream, ClassLoader) */ public @Nullable ClassLoader getClassLoader() { 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 26963d069da..a531250b98f 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,12 +78,12 @@ class SerializerTests { assertThat(deserializer.expectedInputStream).isNotNull(); } - @Test + @Test // gh-36833 void defaultDeserializerExposesNullClassLoaderByDefault() { assertThat(new DefaultDeserializer().getClassLoader()).isNull(); } - @Test + @Test // gh-36833 void defaultDeserializerExposesConfiguredClassLoader() { ClassLoader classLoader = getClass().getClassLoader(); assertThat(new DefaultDeserializer(classLoader).getClassLoader()).isSameAs(classLoader);