JsonFunctions: handle null Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/c43b378c Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/c43b378c Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/c43b378c
Branch: refs/heads/master Commit: c43b378ce0406540e047e4f504e2496e29979c92 Parents: 406581c Author: Aled Sage <[email protected]> Authored: Mon Aug 14 13:54:54 2017 +0100 Committer: Aled Sage <[email protected]> Committed: Mon Aug 14 14:57:07 2017 +0100 ---------------------------------------------------------------------- .../brooklyn/feed/http/JsonFunctions.java | 3 ++- .../brooklyn/feed/http/JsonFunctionsTest.java | 20 +++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/c43b378c/core/src/main/java/org/apache/brooklyn/feed/http/JsonFunctions.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/feed/http/JsonFunctions.java b/core/src/main/java/org/apache/brooklyn/feed/http/JsonFunctions.java index 0945f14..90900fa 100644 --- a/core/src/main/java/org/apache/brooklyn/feed/http/JsonFunctions.java +++ b/core/src/main/java/org/apache/brooklyn/feed/http/JsonFunctions.java @@ -172,7 +172,7 @@ public class JsonFunctions { protected static class AsJson implements Function<String, JsonElement> { @Override public JsonElement apply(String input) { - return new JsonParser().parse(input); + return (input != null) ? new JsonParser().parse(input) : null; } } @@ -315,6 +315,7 @@ public class JsonFunctions { } @SuppressWarnings("unchecked") @Override public T apply(JsonElement input) { + if (input == null) return null; String jsonString = input.toString(); Object rawElement = JsonPath.read(jsonString, path); return (T) rawElement; http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/c43b378c/core/src/test/java/org/apache/brooklyn/feed/http/JsonFunctionsTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/brooklyn/feed/http/JsonFunctionsTest.java b/core/src/test/java/org/apache/brooklyn/feed/http/JsonFunctionsTest.java index d1a5d0a..638e10d 100644 --- a/core/src/test/java/org/apache/brooklyn/feed/http/JsonFunctionsTest.java +++ b/core/src/test/java/org/apache/brooklyn/feed/http/JsonFunctionsTest.java @@ -28,7 +28,6 @@ import org.apache.brooklyn.util.guava.Maybe; import org.testng.Assert; import org.testng.annotations.Test; -import com.google.common.collect.ImmutableList; import com.google.gson.JsonElement; import com.google.gson.JsonParser; import com.jayway.jsonpath.PathNotFoundException; @@ -45,6 +44,19 @@ public class JsonFunctionsTest { } @Test + public void testAsJson() { + JsonElement jsonElement = europeMap(); + String jsonString = jsonElement.toString(); + JsonElement result = JsonFunctions.asJson().apply(jsonString); + Assert.assertEquals(result.toString(), jsonString); + } + + @Test + public void testAsJsonWithNullReturnsNull() { + Assert.assertNull(JsonFunctions.asJson().apply(null)); + } + + @Test public void testWalk1() { JsonElement pop = JsonFunctions.walk("europe", "france", "population").apply(europeMap()); Assert.assertEquals( (int)JsonFunctions.cast(Integer.class).apply(pop), 80*1000*1000 ); @@ -122,6 +134,12 @@ public class JsonFunctionsTest { } @Test + public void testGetPathWithNullReturnsNull(){ + Integer obj = (Integer) JsonFunctions.getPath("$.europe.uk.edinburgh.population").apply(null); + Assert.assertNull(obj); + } + + @Test public void testGetPathSizeOfMap(){ JsonElement json = JsonFunctions.asJson().apply("{\"mymap\": {\"k1\": \"v1\", \"k2\": \"v2\"}}"); Integer obj = (Integer) JsonFunctions.getPath("$.mymap.size()").apply(json);
