Skip to content

Commit d0b8bd8

Browse files
committed
Merge pull request #1252 from mohitchugh/mohitchugh-writeContext-unittest
Added a unit test to illustrate the issue with the JsonWriteContext i…
2 parents 3c63730 + 010633a commit d0b8bd8

File tree

2 files changed

+80
-0
lines changed

2 files changed

+80
-0
lines changed

src/test/java/com/fasterxml/jackson/databind/filter/TestJsonFilter.java

+44
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@
22

33
import com.fasterxml.jackson.annotation.*;
44

5+
6+
import com.fasterxml.jackson.core.JsonGenerator;
7+
import com.fasterxml.jackson.core.JsonStreamContext;
58
import com.fasterxml.jackson.databind.*;
69
import com.fasterxml.jackson.databind.ser.FilterProvider;
10+
import com.fasterxml.jackson.databind.ser.PropertyWriter;
711
import com.fasterxml.jackson.databind.ser.impl.*;
812

913
/**
@@ -19,6 +23,46 @@ static class Bean {
1923
public String b = "b";
2024
}
2125

26+
@JsonFilter("checkSiblingContextFilter")
27+
static class CheckSiblingContextBean {
28+
public A a = new A();
29+
public B b = new B();
30+
@JsonFilter("checkSiblingContextFilter")
31+
static class A {
32+
}
33+
@JsonFilter("checkSiblingContextFilter")
34+
static class B {
35+
public C c = new C();
36+
@JsonFilter("checkSiblingContextFilter")
37+
static class C {
38+
}
39+
}
40+
}
41+
42+
static class CheckSiblingContextFilter extends SimpleBeanPropertyFilter {
43+
@Override
44+
public void serializeAsField(Object bean, JsonGenerator jgen, SerializerProvider prov, PropertyWriter writer) throws Exception {
45+
JsonStreamContext sc = jgen.getOutputContext();
46+
47+
if (writer.getName() != null && writer.getName().equals("c")) {
48+
//This assertion is failing as sc.getParent() incorrectly returns 'a'. If you comment out the member 'a'
49+
// in the CheckSiblingContextBean, you'll see that the sc.getParent() correctly returns 'b'
50+
assertEquals("b", sc.getParent().getCurrentName());
51+
}
52+
writer.serializeAsField(bean, jgen, prov);
53+
}
54+
}
55+
56+
public void testCheckSiblingContextFilter() {
57+
FilterProvider prov = new SimpleFilterProvider().addFilter("checkSiblingContextFilter",
58+
new CheckSiblingContextFilter());
59+
60+
ObjectMapper mapper = new ObjectMapper();
61+
mapper.setFilterProvider(prov);
62+
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
63+
mapper.valueToTree(new CheckSiblingContextBean());
64+
}
65+
2266
// [Issue#89]
2367
static class Pod
2468
{

src/test/java/com/fasterxml/jackson/databind/util/TestTokenBuffer.java

+36
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.fasterxml.jackson.core.util.JsonParserSequence;
88
import com.fasterxml.jackson.databind.BaseMapTest;
99
import com.fasterxml.jackson.databind.ObjectMapper;
10+
import com.sun.xml.internal.messaging.saaj.packaging.mime.internet.HeaderTokenizer;
1011

1112
public class TestTokenBuffer extends BaseMapTest
1213
{
@@ -54,6 +55,41 @@ public void testSimpleWrites() throws IOException
5455
buf.close();
5556
}
5657

58+
public void testParentContext() throws IOException
59+
{
60+
TokenBuffer buf = new TokenBuffer(null, false); // no ObjectCodec
61+
buf.writeStartObject();
62+
buf.writeFieldName("b");
63+
buf.writeStartObject();
64+
buf.writeFieldName("c");
65+
//This assertion succeeds as expected
66+
assertEquals("b", buf.getOutputContext().getParent().getCurrentName());
67+
buf.writeString("cval");
68+
buf.writeEndObject();
69+
buf.writeEndObject();
70+
buf.close();
71+
}
72+
73+
public void testParentSiblingContext() throws IOException
74+
{
75+
TokenBuffer buf = new TokenBuffer(null, false); // no ObjectCodec
76+
77+
buf.writeStartObject();
78+
buf.writeFieldName("a");
79+
buf.writeStartObject();
80+
buf.writeEndObject();
81+
82+
buf.writeFieldName("b");
83+
buf.writeStartObject();
84+
buf.writeFieldName("c");
85+
//This assertion fails (because of 'a')
86+
assertEquals("b", buf.getOutputContext().getParent().getCurrentName());
87+
buf.writeString("cval");
88+
buf.writeEndObject();
89+
buf.writeEndObject();
90+
buf.close();
91+
}
92+
5793
public void testSimpleArray() throws IOException
5894
{
5995
TokenBuffer buf = new TokenBuffer(null, false); // no ObjectCodec

0 commit comments

Comments
 (0)