public JsonXContentGenerator(JsonGenerator jsonGenerator, OutputStream os, String... filters) { if (jsonGenerator instanceof GeneratorBase) { this.base = (GeneratorBase) jsonGenerator; } else { this.base = null; } if (CollectionUtils.isEmpty(filters)) { this.generator = jsonGenerator; this.filter = null; } else { this.filter = new FilteringGeneratorDelegate(jsonGenerator, new FilterPathBasedFilter(filters), true, true); this.generator = this.filter; } this.os = os; }
private void assertResult(String input, String filter, boolean inclusive, String expected) throws Exception { try (BytesStreamOutput os = new BytesStreamOutput()) { try (FilteringGeneratorDelegate generator = new FilteringGeneratorDelegate(JSON_FACTORY.createGenerator(os), new FilterPathBasedFilter(Collections.singleton(filter), inclusive), true, true)) { try (JsonParser parser = JSON_FACTORY.createParser(replaceQuotes(input))) { while (parser.nextToken() != null) { generator.copyCurrentStructure(parser); } } } assertThat(os.bytes().utf8ToString(), equalTo(replaceQuotes(expected))); } }
public void testFilteringWithEscapedChars() throws Exception { final String SAMPLE_WITH_QUOTES = "\b\t\f\n\r\"foo\"\u0000"; ByteArrayOutputStream out = new ByteArrayOutputStream(); @SuppressWarnings("resource") JsonGenerator g = JSON_F.createGenerator(ObjectWriteContext.empty(), out); FilteringGeneratorDelegate gen = new FilteringGeneratorDelegate(g, new JsonPointerBasedFilter("/escapes"), true, // includePath false // multipleMatches ); //final String JSON = "{'a':123,'array':[1,2],'escapes':'\b\t\f\n\r\"foo\"\u0000'}"; gen.writeStartObject(); gen.writeFieldName("a"); gen.writeNumber((int) 123); gen.writeFieldName("array"); gen.writeStartArray(); gen.writeNumber((short) 1); gen.writeNumber((short) 2); gen.writeEndArray(); gen.writeFieldName("escapes"); final byte[] raw = SAMPLE_WITH_QUOTES.toString().getBytes("UTF-8"); gen.writeUTF8String(raw, 0, raw.length); gen.writeEndObject(); gen.close(); JsonParser p = JSON_F.createParser(ObjectReadContext.empty(), out.toByteArray()); assertToken(JsonToken.START_OBJECT, p.nextToken()); assertToken(JsonToken.FIELD_NAME, p.nextToken()); assertEquals("escapes", p.currentName()); assertToken(JsonToken.VALUE_STRING, p.nextToken()); assertEquals(SAMPLE_WITH_QUOTES, p.getText()); assertToken(JsonToken.END_OBJECT, p.nextToken()); assertNull(p.nextToken()); p.close(); }