From 0973348bde86f705f4a5d0218e23fcd54d3091be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Tue, 23 Aug 2022 12:55:26 +0200 Subject: [PATCH] Add classpath checks to JacksonModulesRuntimeHints Closes gh-29001 --- .../json/JacksonModulesRuntimeHints.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/JacksonModulesRuntimeHints.java b/spring-web/src/main/java/org/springframework/http/converter/json/JacksonModulesRuntimeHints.java index e1bc649086..b088ee0cbf 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/json/JacksonModulesRuntimeHints.java +++ b/spring-web/src/main/java/org/springframework/http/converter/json/JacksonModulesRuntimeHints.java @@ -21,6 +21,7 @@ import org.springframework.aot.hint.ReflectionHints; import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.RuntimeHintsRegistrar; import org.springframework.aot.hint.TypeReference; +import org.springframework.util.ClassUtils; /** * {@link RuntimeHintsRegistrar} implementation that registers reflection entries @@ -34,14 +35,16 @@ class JacksonModulesRuntimeHints implements RuntimeHintsRegistrar { @Override public void registerHints(RuntimeHints hints, ClassLoader classLoader) { ReflectionHints reflectionHints = hints.reflection(); - registerType(reflectionHints, "com.fasterxml.jackson.datatype.jdk8.Jdk8Module"); - registerType(reflectionHints, "com.fasterxml.jackson.datatype.jsr310.JavaTimeModule"); - registerType(reflectionHints, "com.fasterxml.jackson.module.kotlin.KotlinModule"); + registerType(reflectionHints, "com.fasterxml.jackson.datatype.jdk8.Jdk8Module", classLoader); + registerType(reflectionHints, "com.fasterxml.jackson.datatype.jsr310.JavaTimeModule", classLoader); + registerType(reflectionHints, "com.fasterxml.jackson.module.kotlin.KotlinModule", classLoader); } - private void registerType(ReflectionHints reflectionHints, String className) { - reflectionHints.registerType(TypeReference.of(className), - builder -> builder.onReachableType(TypeReference.of(Jackson2ObjectMapperBuilder.class)) - .withMembers(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS)); + private void registerType(ReflectionHints reflectionHints, String className, ClassLoader classLoader) { + if (ClassUtils.isPresent(className, classLoader)) { + reflectionHints.registerType(TypeReference.of(className), + builder -> builder.onReachableType(TypeReference.of(Jackson2ObjectMapperBuilder.class)) + .withMembers(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS)); + } } }