Skip to content

Commit ea0eb66

Browse files
committed
... and actually checking in #7 fix.
1 parent 337213e commit ea0eb66

File tree

3 files changed

+122
-28
lines changed

3 files changed

+122
-28
lines changed

afterburner/src/main/java/com/fasterxml/jackson/module/afterburner/ser/OptimizedBeanPropertyWriter.java

+10-2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,14 @@ public void assignSerializer(JsonSerializer<Object> ser) {
8282
}
8383
}
8484

85+
@Override // since 2.7.6
86+
public void assignNullSerializer(JsonSerializer<Object> nullSer) {
87+
super.assignNullSerializer(nullSer);
88+
if (fallbackWriter != null) {
89+
fallbackWriter.assignNullSerializer(nullSer);
90+
}
91+
}
92+
8593
public abstract T withAccessor(BeanPropertyAccessor acc);
8694

8795
public abstract BeanPropertyWriter withSerializer(JsonSerializer<Object> ser);
@@ -112,8 +120,8 @@ protected synchronized void _handleProblem(Object bean, JsonGenerator gen, Seria
112120
throw (Error) t;
113121
}
114122
throw (Exception) t;
115-
}
116-
123+
}
124+
117125
protected void _reportProblem(Object bean, Throwable e)
118126
{
119127
broken = true;

afterburner/src/test/java/com/fasterxml/jackson/module/afterburner/ser/TestInclusionAnnotations.java

+20-26
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package com.fasterxml.jackson.module.afterburner.ser;
22

33
import com.fasterxml.jackson.annotation.JsonInclude;
4-
54
import com.fasterxml.jackson.databind.ObjectMapper;
6-
75
import com.fasterxml.jackson.module.afterburner.AfterburnerTestBase;
86

97
public class TestInclusionAnnotations extends AfterburnerTestBase
@@ -49,7 +47,7 @@ public class NonEmptyStringWrapper2 {
4947
public NonEmptyStringWrapper2(String v) { value = v; }
5048
}
5149

52-
public class AnyWrapper
50+
static class AnyWrapper
5351
{
5452
public String name = "Foo";
5553

@@ -58,74 +56,70 @@ public class AnyWrapper
5856

5957
public AnyWrapper(Object w) { wrapped = w; }
6058
}
61-
59+
6260
/*
6361
/**********************************************************************
6462
/* Test methods
6563
/**********************************************************************
6664
*/
6765

66+
private final ObjectMapper MAPPER = mapperWithModule();
67+
6868
public void testIncludeUsingAnnotation() throws Exception
6969
{
70-
ObjectMapper mapper = mapperWithModule();
71-
72-
String json = mapper.writeValueAsString(new IntWrapper(3));
70+
String json = MAPPER.writeValueAsString(new IntWrapper(3));
7371
assertEquals("{\"value\":3}", json);
74-
json = mapper.writeValueAsString(new IntWrapper(null));
72+
json = MAPPER.writeValueAsString(new IntWrapper(null));
7573
assertEquals("{}", json);
7674

77-
json = mapper.writeValueAsString(new AnyWrapper(new IntWrapper(null)));
75+
json = MAPPER.writeValueAsString(new AnyWrapper(new IntWrapper(null)));
7876
assertEquals("{\"name\":\"Foo\",\"wrapped\":{}}", json);
79-
json = mapper.writeValueAsString(new AnyWrapper(null));
77+
json = MAPPER.writeValueAsString(new AnyWrapper(null));
8078
assertEquals("{\"name\":\"Foo\"}", json);
8179
}
8280

8381
// [module-afterburner#39]
8482
public void testEmptyExclusion() throws Exception
8583
{
86-
ObjectMapper mapper = mapperWithModule();
8784
String json;
8885

89-
json = mapper.writeValueAsString(new NonEmptyIntWrapper(3));
86+
json = MAPPER.writeValueAsString(new NonEmptyIntWrapper(3));
9087
assertEquals("{\"value\":3}", json);
9188
// as per [module-afterburner#63], ints should not have "empty" value
9289
// (temporarily, for 2.6, they did have)
93-
json = mapper.writeValueAsString(new NonEmptyIntWrapper(0));
90+
json = MAPPER.writeValueAsString(new NonEmptyIntWrapper(0));
9491
assertEquals("{\"value\":0}", json);
9592

96-
json = mapper.writeValueAsString(new NonEmptyStringWrapper("x"));
93+
json = MAPPER.writeValueAsString(new NonEmptyStringWrapper("x"));
9794
assertEquals("{\"value\":\"x\"}", json);
98-
json = mapper.writeValueAsString(new NonEmptyStringWrapper(""));
95+
json = MAPPER.writeValueAsString(new NonEmptyStringWrapper(""));
9996
assertEquals("{}", json);
100-
json = mapper.writeValueAsString(new NonEmptyStringWrapper(null));
97+
json = MAPPER.writeValueAsString(new NonEmptyStringWrapper(null));
10198
assertEquals("{}", json);
10299
}
103100

104101
public void testEmptyExclusionViaClass() throws Exception
105102
{
106-
ObjectMapper mapper = mapperWithModule();
107-
108103
assertEquals("{\"value\":3}",
109-
mapper.writeValueAsString(new NonEmptyIntWrapper2(3)));
104+
MAPPER.writeValueAsString(new NonEmptyIntWrapper2(3)));
110105
assertEquals("{\"value\":0}",
111-
mapper.writeValueAsString(new NonEmptyIntWrapper2(0)));
106+
MAPPER.writeValueAsString(new NonEmptyIntWrapper2(0)));
112107

113108
assertEquals("{\"value\":\"x\"}",
114-
mapper.writeValueAsString(new NonEmptyStringWrapper2("x")));
109+
MAPPER.writeValueAsString(new NonEmptyStringWrapper2("x")));
115110
assertEquals("{}",
116-
mapper.writeValueAsString(new NonEmptyStringWrapper2("")));
111+
MAPPER.writeValueAsString(new NonEmptyStringWrapper2("")));
117112
assertEquals("{}",
118-
mapper.writeValueAsString(new NonEmptyStringWrapper2(null)));
113+
MAPPER.writeValueAsString(new NonEmptyStringWrapper2(null)));
119114
}
120115

121116
public void testDefaultExclusion() throws Exception
122117
{
123-
ObjectMapper mapper = mapperWithModule();
124118
String json;
125119

126-
json = mapper.writeValueAsString(new NonDefaultIntWrapper(3));
120+
json = MAPPER.writeValueAsString(new NonDefaultIntWrapper(3));
127121
assertEquals("{\"value\":3}", json);
128-
json = mapper.writeValueAsString(new NonDefaultIntWrapper(0));
122+
json = MAPPER.writeValueAsString(new NonDefaultIntWrapper(0));
129123
assertEquals("{}", json);
130124
}
131125
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package com.fasterxml.jackson.module.afterburner.ser;
2+
3+
import java.io.IOException;
4+
5+
import com.fasterxml.jackson.annotation.JsonInclude;
6+
import com.fasterxml.jackson.core.JsonGenerator;
7+
8+
import com.fasterxml.jackson.databind.*;
9+
import com.fasterxml.jackson.databind.module.SimpleModule;
10+
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
11+
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
12+
import com.fasterxml.jackson.module.afterburner.AfterburnerTestBase;
13+
14+
/**
15+
* Reproduction of issue [modules-base#14]; accidental removal of null
16+
* values, due to lack of delegation of "null serializer" (for 2.7)
17+
*/
18+
public class TestInclusionNull extends AfterburnerTestBase
19+
{
20+
@JsonInclude(JsonInclude.Include.ALWAYS)
21+
static class MyPOJOBeanWrapper {
22+
public int id = 3;
23+
24+
public MyPOJOBean wrapped;
25+
26+
public MyPOJOBeanWrapper() { wrapped = new MyPOJOBean(); }
27+
public MyPOJOBeanWrapper(int x) { wrapped = new MyPOJOBean(x); }
28+
}
29+
30+
@JsonInclude(JsonInclude.Include.ALWAYS)
31+
static final class MyPOJOBean {
32+
public MyPOJO value;
33+
34+
protected MyPOJOBean() { }
35+
public MyPOJOBean(int x) {
36+
value = new MyPOJO();
37+
value.x = x;
38+
}
39+
}
40+
41+
static class MyPOJO {
42+
public int x = 3;
43+
}
44+
45+
@SuppressWarnings("serial")
46+
static class MyPOJOSerializer extends StdSerializer<MyPOJO>
47+
implements ContextualSerializer
48+
{
49+
private final String message;
50+
51+
public MyPOJOSerializer() { this("Foo"); }
52+
public MyPOJOSerializer(String str) {
53+
super(MyPOJO.class);
54+
System.err.println("DEBUG: MyPOJOSerializer with '"+str+"'");
55+
message = str;
56+
}
57+
58+
@Override
59+
public void serialize(MyPOJO value, JsonGenerator gen,
60+
SerializerProvider provider) throws IOException {
61+
System.err.println("DEBUG: serialize MyPOJO");
62+
63+
gen.writeString(message);
64+
}
65+
66+
@Override
67+
public JsonSerializer<?> createContextual(SerializerProvider prov,
68+
BeanProperty property) throws JsonMappingException {
69+
System.err.println("DEBUG: create contextual");
70+
return new MyPOJOSerializer(message + "bar");
71+
}
72+
}
73+
74+
/*
75+
/**********************************************************************
76+
/* Test methods
77+
/**********************************************************************
78+
*/
79+
80+
// for [#14]
81+
public void testNonStdSerializerAndNull() throws Exception
82+
{
83+
SimpleModule mod = new SimpleModule("test");
84+
mod.addSerializer(MyPOJO.class, new MyPOJOSerializer());
85+
final ObjectMapper mapper = mapperWithModule()
86+
.registerModule(mod);
87+
88+
assertEquals(aposToQuotes("{'id':3,'wrapped':{'value':null}}"),
89+
mapper.writeValueAsString(new MyPOJOBeanWrapper()));
90+
}
91+
92+
}

0 commit comments

Comments
 (0)