From f95fbd81b497f6680d3416918799fd72c4f230da Mon Sep 17 00:00:00 2001 From: Peter Moser Date: Fri, 17 Apr 2026 18:03:20 +0200 Subject: [PATCH 1/2] backport class path util from main and fix a potential NPE --- .../reflection/util/ClassScannerUtil.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/java/it/aboutbits/springboot/toolbox/reflection/util/ClassScannerUtil.java b/src/main/java/it/aboutbits/springboot/toolbox/reflection/util/ClassScannerUtil.java index 9bcd0fc..195feb7 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/reflection/util/ClassScannerUtil.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/reflection/util/ClassScannerUtil.java @@ -6,19 +6,27 @@ import org.jspecify.annotations.NullMarked; import java.lang.annotation.Annotation; +import java.util.Arrays; +import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @NullMarked public final class ClassScannerUtil { + private static final Map CACHE = new ConcurrentHashMap<>(); + private ClassScannerUtil() { } public static ClassScanner getScannerForPackages(String... packages) { - return new ClassScanner(packages); + var cacheKey = Arrays.stream(packages) + .sorted() + .collect(Collectors.joining("|")); + return CACHE.computeIfAbsent(cacheKey, _ -> new ClassScanner(packages)); } - public static final class ClassScanner implements AutoCloseable { + public static final class ClassScanner { private final ScanResult scanResult; private final String[] packages; @@ -51,10 +59,5 @@ public Set> getClassesAnnotatedWith(Class clazz) ClassInfo::loadClass ).collect(Collectors.toSet()); } - - @Override - public void close() { - scanResult.close(); - } } } From feafcbc64bd11a4fa582c806a29435cdf60eaa61 Mon Sep 17 00:00:00 2001 From: Peter Moser Date: Fri, 17 Apr 2026 18:15:15 +0200 Subject: [PATCH 2/2] backport class scanner and fix NPE --- .../springboot/toolbox/jackson/CustomTypeDeserializer.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/it/aboutbits/springboot/toolbox/jackson/CustomTypeDeserializer.java b/src/main/java/it/aboutbits/springboot/toolbox/jackson/CustomTypeDeserializer.java index c50e6e5..e4c75e6 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/jackson/CustomTypeDeserializer.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/jackson/CustomTypeDeserializer.java @@ -44,6 +44,10 @@ public Class handledType() { @Override public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { + if (jsonParser.getCurrentToken() == null) { + return null; + } + var value = typeConverter.apply(jsonParser); try {