From 870de3423d5c822521b7741eafda57cea7107012 Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Sat, 25 Jan 2025 19:58:58 -0800 Subject: [PATCH] Fix #4878: NPE for Map-converting serializer --- .../convert/MapConversion4878Test.java | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/test/java/com/fasterxml/jackson/databind/convert/MapConversion4878Test.java diff --git a/src/test/java/com/fasterxml/jackson/databind/convert/MapConversion4878Test.java b/src/test/java/com/fasterxml/jackson/databind/convert/MapConversion4878Test.java new file mode 100644 index 0000000000..3da412bec6 --- /dev/null +++ b/src/test/java/com/fasterxml/jackson/databind/convert/MapConversion4878Test.java @@ -0,0 +1,59 @@ +package com.fasterxml.jackson.databind.convert; + +import java.util.Collections; +import java.util.Map; + +import org.junit.jupiter.api.Test; + +import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.module.SimpleSerializers; +import com.fasterxml.jackson.databind.ser.std.StdDelegatingSerializer; +import com.fasterxml.jackson.databind.testutil.DatabindTestUtil; +import com.fasterxml.jackson.databind.util.StdConverter; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class MapConversion4878Test extends DatabindTestUtil +{ + // [databind#4878] + static class MapWrapper4878 { + final Map value; + + MapWrapper4878(Map value) { + this.value = value; + } + } + + static class WrapperConverter4878 extends StdConverter { + @Override + public Object convert(MapWrapper4878 value) { + return value.value; + } + } + + @SuppressWarnings("serial") + static class Serializers4878 extends SimpleSerializers { + @Override + public JsonSerializer findSerializer(SerializationConfig config, JavaType type, BeanDescription beanDesc) { + Class rawClass = type.getRawClass(); + if (MapWrapper4878.class.isAssignableFrom(rawClass)) { + return new StdDelegatingSerializer(new WrapperConverter4878()); + } + return super.findSerializer(config, type, beanDesc); + } + } + + // [databind#4878] + @Test + public void testMapConverter() throws Exception + { + SimpleModule sm = new SimpleModule(); + sm.setSerializers(new Serializers4878()); + final ObjectMapper mapper = jsonMapperBuilder() + .addModule(sm) + .build(); + String json = mapper.writeValueAsString(new MapWrapper4878(Collections.singletonMap("a", 1))); + assertEquals(a2q("{'a':1}"), json); + } +}