Repository: knox Updated Branches: refs/heads/master 986172bb5 -> 1c887df8e
KNOX-1602 - JsonFilterReader should handle strings, numbers, booleans, and null at root Signed-off-by: Kevin Risden <kris...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/knox/repo Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/1c887df8 Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/1c887df8 Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/1c887df8 Branch: refs/heads/master Commit: 1c887df8e303b9267a879e58b86c4908a0b26225 Parents: 986172b Author: Kevin Risden <kris...@apache.org> Authored: Wed Nov 14 17:26:32 2018 -0500 Committer: Kevin Risden <kris...@apache.org> Committed: Wed Nov 14 17:26:36 2018 -0500 ---------------------------------------------------------------------- .../rewrite/impl/json/JsonFilterReader.java | 16 ++++++++ .../rewrite/impl/json/JsonFilterReaderTest.java | 42 ++++++++++++++++++++ 2 files changed, 58 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/knox/blob/1c887df8/gateway-provider-rewrite/src/main/java/org/apache/knox/gateway/filter/rewrite/impl/json/JsonFilterReader.java ---------------------------------------------------------------------- diff --git a/gateway-provider-rewrite/src/main/java/org/apache/knox/gateway/filter/rewrite/impl/json/JsonFilterReader.java b/gateway-provider-rewrite/src/main/java/org/apache/knox/gateway/filter/rewrite/impl/json/JsonFilterReader.java index 2e47a58..ecc7925 100644 --- a/gateway-provider-rewrite/src/main/java/org/apache/knox/gateway/filter/rewrite/impl/json/JsonFilterReader.java +++ b/gateway-provider-rewrite/src/main/java/org/apache/knox/gateway/filter/rewrite/impl/json/JsonFilterReader.java @@ -305,6 +305,10 @@ class JsonFilterReader extends Reader { Level child; Level parent; String value = null; + if(stack.isEmpty()) { + generator.writeString( parser.getText() ); + return; + } parent = stack.peek(); if( parent.isArray() ) { ArrayNode array = (ArrayNode)parent.node; @@ -337,6 +341,10 @@ class JsonFilterReader extends Reader { private void processValueNumber() throws IOException { Level child; Level parent; + if(stack.isEmpty()) { + processedUnbufferedValueNumber(); + return; + } parent = stack.peek(); if( parent.isArray() ) { if( bufferingLevel != null ) { @@ -430,6 +438,10 @@ class JsonFilterReader extends Reader { private void processValueBoolean() throws IOException { Level child; Level parent; + if(stack.isEmpty()) { + generator.writeBoolean(parser.getBooleanValue()); + return; + } parent = stack.peek(); if( parent.isArray() ) { ((ArrayNode)parent.node ).add( parser.getBooleanValue() ); @@ -453,6 +465,10 @@ class JsonFilterReader extends Reader { private void processValueNull() throws IOException { Level child; + if(stack.isEmpty()) { + generator.writeNull(); + return; + } Level parent = stack.peek(); if( parent.isArray() ) { ((ArrayNode)parent.node ).addNull(); http://git-wip-us.apache.org/repos/asf/knox/blob/1c887df8/gateway-provider-rewrite/src/test/java/org/apache/knox/gateway/filter/rewrite/impl/json/JsonFilterReaderTest.java ---------------------------------------------------------------------- diff --git a/gateway-provider-rewrite/src/test/java/org/apache/knox/gateway/filter/rewrite/impl/json/JsonFilterReaderTest.java b/gateway-provider-rewrite/src/test/java/org/apache/knox/gateway/filter/rewrite/impl/json/JsonFilterReaderTest.java index b92363a..25488a0 100644 --- a/gateway-provider-rewrite/src/test/java/org/apache/knox/gateway/filter/rewrite/impl/json/JsonFilterReaderTest.java +++ b/gateway-provider-rewrite/src/test/java/org/apache/knox/gateway/filter/rewrite/impl/json/JsonFilterReaderTest.java @@ -33,6 +33,9 @@ import java.io.IOException; import java.io.InputStream; import java.io.StringReader; import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.List; +import java.util.Random; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -56,6 +59,45 @@ public class JsonFilterReaderTest { assertThat( output, containsString( "\"startedTime\":1399975176760}" ) ); } + @Test + public void testString() throws IOException { + String inputJson = "\"abc\""; + StringReader inputReader = new StringReader( inputJson ); + JsonFilterReader filterReader = new TestJsonFilterReader( inputReader, null ); + String outputJson = new String( IOUtils.toCharArray( filterReader ) ); + JsonAssert.with( outputJson ).assertThat( "$", is( "abc" ) ); + } + + @Test + public void testNumber() throws IOException { + int num = new Random().nextInt(); + String inputJson = String.valueOf(num); + StringReader inputReader = new StringReader( inputJson ); + JsonFilterReader filterReader = new TestJsonFilterReader( inputReader, null ); + String outputJson = new String( IOUtils.toCharArray( filterReader ) ); + JsonAssert.with( outputJson ).assertThat( "$", is( num ) ); + } + + @Test + public void testBoolean() throws IOException { + List<Boolean> booleans = Arrays.asList(true, false); + for(boolean bool : booleans) { + String inputJson = String.valueOf(bool); + StringReader inputReader = new StringReader(inputJson); + JsonFilterReader filterReader = new TestJsonFilterReader(inputReader, null); + String outputJson = new String(IOUtils.toCharArray(filterReader)); + JsonAssert.with(outputJson).assertThat("$", is(bool)); + } + } + + @Test + public void testNull() throws IOException { + String inputJson = "null"; + StringReader inputReader = new StringReader( inputJson ); + JsonFilterReader filterReader = new TestJsonFilterReader( inputReader, null ); + String outputJson = new String( IOUtils.toCharArray( filterReader ) ); + assertThat(inputJson, is(outputJson)); + } @Test public void testSimple() throws IOException {