Skip to content

Commit 1030914

Browse files
authored
Merge pull request #360 from arnaudroger/issue_359
#359 override writeStartObject(Object forValue)
2 parents d89facc + 825ec45 commit 1030914

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

src/main/java/com/fasterxml/jackson/core/filter/FilteringGeneratorDelegate.java

+30
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,36 @@ public void writeStartObject() throws IOException
243243
}
244244
}
245245

246+
@Override
247+
public void writeStartObject(Object forValue) throws IOException
248+
{
249+
if (_itemFilter == null) {
250+
_filterContext = _filterContext.createChildObjectContext(_itemFilter, false);
251+
return;
252+
}
253+
if (_itemFilter == TokenFilter.INCLUDE_ALL) {
254+
_filterContext = _filterContext.createChildObjectContext(_itemFilter, true);
255+
delegate.writeStartObject(forValue);
256+
return;
257+
}
258+
259+
TokenFilter f = _filterContext.checkValue(_itemFilter);
260+
if (f == null) {
261+
return;
262+
}
263+
264+
if (f != TokenFilter.INCLUDE_ALL) {
265+
f = f.filterStartObject();
266+
}
267+
if (f == TokenFilter.INCLUDE_ALL) {
268+
_checkParentPath();
269+
_filterContext = _filterContext.createChildObjectContext(f, true);
270+
delegate.writeStartObject(forValue);
271+
} else { // filter out
272+
_filterContext = _filterContext.createChildObjectContext(f, false);
273+
}
274+
}
275+
246276
@Override
247277
public void writeEndObject() throws IOException
248278
{

src/test/java/com/fasterxml/jackson/core/filter/BasicGeneratorFilteringTest.java

+25
Original file line numberDiff line numberDiff line change
@@ -305,4 +305,29 @@ public void testIndexMatchWithPath2() throws Exception
305305
writeJsonDoc(JSON_F, JSON, gen);
306306
assertEquals(aposToQuotes("{'array':[1,2]}"), w.toString());
307307
}
308+
309+
public void testWriteStartObjectWithObject() throws Exception
310+
{
311+
StringWriter w = new StringWriter();
312+
313+
JsonGenerator gen = new FilteringGeneratorDelegate(JSON_F.createGenerator(w),
314+
TokenFilter.INCLUDE_ALL,
315+
true, true);
316+
317+
String value = "val";
318+
319+
gen.writeStartObject(new Object());
320+
gen.writeFieldName("field1");
321+
{
322+
gen.writeStartObject(value);
323+
gen.writeEndObject();
324+
}
325+
326+
gen.writeFieldName("field2");
327+
gen.writeString("val2");
328+
329+
gen.writeEndObject();
330+
gen.close();
331+
assertEquals(aposToQuotes("{'field1':{},'field2':'val2'}"), w.toString());
332+
}
308333
}

0 commit comments

Comments
 (0)