Visitar URL original
Fix #6399: remove @JacksonStdImpl from NullSerializer (#6400) · FasterXML/jackson-databind@cd319b4 · GitHub
Skip to content

Commit cd319b4

Browse files
authored
Fix #6399: remove @JacksonStdImpl from NullSerializer (#6400)
1 parent ff7c1c1 commit cd319b4

3 files changed

Lines changed: 17 additions & 2 deletions

File tree

‎release-notes/VERSION-2.x‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ Project: jackson-databind
4444
#6339: Enum aliases from an appended `AnnotationIntrospector` are discarded:
4545
`JacksonAnnotationIntrospector.findEnumAliases()` overwrites every slot
4646
(reported, fixed by @Marti2203)
47+
#6399: `NullSerializer` should not be annotated with `@JacksonStdImpl`
4748

4849
2.22.5 (not yet released)
4950

‎src/main/java/com/fasterxml/jackson/databind/ser/std/NullSerializer.java‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import com.fasterxml.jackson.core.*;
77
import com.fasterxml.jackson.databind.*;
8-
import com.fasterxml.jackson.databind.annotation.JacksonStdImpl;
98
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
109
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
1110

@@ -15,8 +14,11 @@
1514
* Used as the default "null serializer" (which is used for serializing
1615
* null object references unless overridden), as well as for some
1716
* more exotic types (java.lang.Void).
17+
*<p>
18+
* NOTE: not annotated with {@code @JacksonStdImpl} (since 2.23): it is a
19+
* fallback rather than the default serializer for any type, and optimization
20+
* modules (Afterburner, Blackbird) would otherwise consider it replaceable.
1821
*/
19-
@JacksonStdImpl
2022
@SuppressWarnings("serial")
2123
public class NullSerializer
2224
extends StdSerializer<Object>

‎src/test/java/com/fasterxml/jackson/databind/ser/filter/NullSerializationTest.java‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.fasterxml.jackson.databind.ser.DefaultSerializerProvider;
1313
import com.fasterxml.jackson.databind.ser.SerializerFactory;
1414
import com.fasterxml.jackson.databind.testutil.DatabindTestUtil;
15+
import com.fasterxml.jackson.databind.util.ClassUtil;
1516

1617
import static org.junit.jupiter.api.Assertions.*;
1718

@@ -138,4 +139,15 @@ public void testNullSerializerForProperty() throws Exception
138139
{
139140
assertEquals("{\"a\":\"foobar\"}", MAPPER.writeValueAsString(new BeanWithNullProps()));
140141
}
142+
143+
// [databind#6399]: `NullSerializer` is a fallback, not the default serializer
144+
// for any type, so must NOT be marked as standard implementation (optimization
145+
// modules like Afterburner and Blackbird consider std impls replaceable)
146+
@Test
147+
public void testNullSerializerNotMarkedAsStdImpl() throws Exception
148+
{
149+
assertFalse(ClassUtil.isJacksonStdImpl(
150+
com.fasterxml.jackson.databind.ser.std.NullSerializer.class),
151+
"NullSerializer must not be @JacksonStdImpl (see databind#6399)");
152+
}
141153
}

0 commit comments

Comments
 (0)