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);

Reply via email to