2
2
3
3
import com .fasterxml .jackson .annotation .*;
4
4
5
+
6
+ import com .fasterxml .jackson .core .JsonGenerator ;
7
+ import com .fasterxml .jackson .core .JsonStreamContext ;
5
8
import com .fasterxml .jackson .databind .*;
6
9
import com .fasterxml .jackson .databind .ser .FilterProvider ;
10
+ import com .fasterxml .jackson .databind .ser .PropertyWriter ;
7
11
import com .fasterxml .jackson .databind .ser .impl .*;
8
12
9
13
/**
@@ -19,6 +23,46 @@ static class Bean {
19
23
public String b = "b" ;
20
24
}
21
25
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
+
22
66
// [Issue#89]
23
67
static class Pod
24
68
{
0 commit comments