diff --git a/web/api/src/test/java/org/onosproject/rest/ApplicationsResourceTest.java b/web/api/src/test/java/org/onosproject/rest/ApplicationsResourceTest.java
index 3e72f18..eeac886 100644
--- a/web/api/src/test/java/org/onosproject/rest/ApplicationsResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/ApplicationsResourceTest.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.rest;
 
+import com.eclipsesource.json.Json;
 import com.eclipsesource.json.JsonArray;
 import com.eclipsesource.json.JsonObject;
 import com.google.common.collect.ImmutableList;
@@ -227,7 +228,7 @@
         String response = rs.path("applications").get(String.class);
         assertThat(response, containsString("{\"applications\":["));
 
-        JsonObject result = JsonObject.readFrom(response);
+        JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
@@ -253,7 +254,7 @@
         WebResource rs = resource();
         String response = rs.path("applications/three").get(String.class);
 
-        JsonObject result = JsonObject.readFrom(response);
+        JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result, matchesApp(app3));
@@ -324,7 +325,7 @@
         WebResource rs = resource();
         String response = rs.path("applications").post(String.class, app4Json);
 
-        JsonObject result = JsonObject.readFrom(response);
+        JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result, matchesApp(app4));
diff --git a/web/api/src/test/java/org/onosproject/rest/DevicesResourceTest.java b/web/api/src/test/java/org/onosproject/rest/DevicesResourceTest.java
index b5164a7..1804fe12 100644
--- a/web/api/src/test/java/org/onosproject/rest/DevicesResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/DevicesResourceTest.java
@@ -17,6 +17,7 @@
 
 import java.util.List;
 
+import com.eclipsesource.json.Json;
 import org.hamcrest.Description;
 import org.hamcrest.TypeSafeMatcher;
 import org.junit.After;
@@ -271,7 +272,7 @@
         String response = rs.path("devices").get(String.class);
         assertThat(response, containsString("{\"devices\":["));
 
-        JsonObject result = JsonObject.readFrom(response);
+        JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
@@ -303,7 +304,7 @@
 
         WebResource rs = resource();
         String response = rs.path("devices/" + deviceId).get(String.class);
-        JsonObject result = JsonObject.readFrom(response);
+        JsonObject result = Json.parse(response).asObject();
         assertThat(result, matchesDevice(device));
     }
 
@@ -335,7 +336,7 @@
         String response =
                 rs.path("devices/" + deviceId + "/ports")
                     .get(String.class);
-        JsonObject result = JsonObject.readFrom(response);
+        JsonObject result = Json.parse(response).asObject();
         assertThat(result, matchesDevice(device));
 
         JsonArray jsonPorts = result.get("ports").asArray();
diff --git a/web/api/src/test/java/org/onosproject/rest/FlowObjectiveResourceTest.java b/web/api/src/test/java/org/onosproject/rest/FlowObjectiveResourceTest.java
index 2dd0001..a17d518 100644
--- a/web/api/src/test/java/org/onosproject/rest/FlowObjectiveResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/FlowObjectiveResourceTest.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.rest;
 
+import com.eclipsesource.json.Json;
 import com.eclipsesource.json.JsonObject;
 import com.sun.jersey.api.client.ClientResponse;
 import com.sun.jersey.api.client.WebResource;
@@ -134,7 +135,7 @@
 
         WebResource rs = resource();
         final String response = rs.path("flowobjectives/next").get(String.class);
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
diff --git a/web/api/src/test/java/org/onosproject/rest/FlowsResourceTest.java b/web/api/src/test/java/org/onosproject/rest/FlowsResourceTest.java
index da192bd..d65f040 100644
--- a/web/api/src/test/java/org/onosproject/rest/FlowsResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/FlowsResourceTest.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.rest;
 
+import com.eclipsesource.json.Json;
 import com.eclipsesource.json.JsonArray;
 import com.eclipsesource.json.JsonObject;
 import com.google.common.collect.ImmutableSet;
@@ -490,7 +491,7 @@
         replay(mockDeviceService);
         final WebResource rs = resource();
         final String response = rs.path("flows").get(String.class);
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
@@ -518,7 +519,7 @@
         replay(mockDeviceService);
         final WebResource rs = resource();
         final String response = rs.path("flows/" + deviceId3).get(String.class);
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
@@ -545,7 +546,7 @@
         final WebResource rs = resource();
         final String response = rs.path("flows/" + deviceId3 + "/"
                 + Long.toString(flow5.id().value())).get(String.class);
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
diff --git a/web/api/src/test/java/org/onosproject/rest/GroupsResourceTest.java b/web/api/src/test/java/org/onosproject/rest/GroupsResourceTest.java
index db322e3..a6ef6fb 100644
--- a/web/api/src/test/java/org/onosproject/rest/GroupsResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/GroupsResourceTest.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.rest;
 
+import com.eclipsesource.json.Json;
 import com.eclipsesource.json.JsonArray;
 import com.eclipsesource.json.JsonObject;
 import com.google.common.collect.ImmutableSet;
@@ -410,7 +411,7 @@
         replay(mockDeviceService);
         final WebResource rs = resource();
         final String response = rs.path("groups").get(String.class);
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
@@ -438,7 +439,7 @@
         replay(mockDeviceService);
         final WebResource rs = resource();
         final String response = rs.path("groups/" + deviceId3).get(String.class);
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
@@ -460,7 +461,7 @@
         replay(mockGroupService);
         final WebResource rs = resource();
         final String response = rs.path("groups/" + deviceId3 + "/" + "111").get(String.class);
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
diff --git a/web/api/src/test/java/org/onosproject/rest/HostResourceTest.java b/web/api/src/test/java/org/onosproject/rest/HostResourceTest.java
index 5ac483d..472ed0f 100644
--- a/web/api/src/test/java/org/onosproject/rest/HostResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/HostResourceTest.java
@@ -21,6 +21,7 @@
 import java.util.HashSet;
 import java.util.Set;
 
+import com.eclipsesource.json.Json;
 import com.sun.jersey.api.client.ClientResponse;
 import org.hamcrest.Description;
 import org.hamcrest.Matchers;
@@ -273,7 +274,7 @@
         String response = rs.path("hosts").get(String.class);
         assertThat(response, containsString("{\"hosts\":["));
 
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
@@ -308,7 +309,7 @@
 
         WebResource rs = resource();
         String response = rs.path("hosts/00:00:11:00:00:01%2F1").get(String.class);
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         assertThat(result, matchesHost(host1));
     }
 
@@ -334,7 +335,7 @@
 
         WebResource rs = resource();
         String response = rs.path("hosts/00:00:11:00:00:01/1").get(String.class);
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         assertThat(result, matchesHost(host1));
     }
 
diff --git a/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java b/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java
index ddbf197..46ecbeb 100644
--- a/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.rest;
 
+import com.eclipsesource.json.Json;
 import com.eclipsesource.json.JsonArray;
 import com.eclipsesource.json.JsonObject;
 import com.eclipsesource.json.JsonValue;
@@ -294,7 +295,7 @@
         final String response = rs.path("intents").get(String.class);
         assertThat(response, containsString("{\"intents\":["));
 
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
@@ -341,13 +342,13 @@
         // Test get using key string
         final String response = rs.path("intents/" + APP_ID.name()
                 + "/0").get(String.class);
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         assertThat(result, matchesIntent(intent));
 
         // Test get using numeric value
         final String responseNumeric = rs.path("intents/" + APP_ID.name()
                 + "/0x0").get(String.class);
-        final JsonObject resultNumeric = JsonObject.readFrom(responseNumeric);
+        final JsonObject resultNumeric = Json.parse(responseNumeric).asObject();
         assertThat(resultNumeric, matchesIntent(intent));
     }
 
diff --git a/web/api/src/test/java/org/onosproject/rest/LinksResourceTest.java b/web/api/src/test/java/org/onosproject/rest/LinksResourceTest.java
index feff0ed..efbcc9b 100644
--- a/web/api/src/test/java/org/onosproject/rest/LinksResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/LinksResourceTest.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.rest;
 
+import com.eclipsesource.json.Json;
 import org.hamcrest.Description;
 import org.hamcrest.TypeSafeMatcher;
 import org.junit.After;
@@ -200,7 +201,7 @@
         String response = rs.path("links").get(String.class);
         assertThat(response, containsString("{\"links\":["));
 
-        JsonObject result = JsonObject.readFrom(response);
+        JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
@@ -233,7 +234,7 @@
                 .get(String.class);
         assertThat(response, containsString("{\"links\":["));
 
-        JsonObject result = JsonObject.readFrom(response);
+        JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
@@ -267,7 +268,7 @@
                 .get(String.class);
         assertThat(response, containsString("{\"links\":["));
 
-        JsonObject result = JsonObject.readFrom(response);
+        JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
@@ -302,7 +303,7 @@
                 .get(String.class);
         assertThat(response, containsString("{\"links\":["));
 
-        JsonObject result = JsonObject.readFrom(response);
+        JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
@@ -336,7 +337,7 @@
                 .get(String.class);
         assertThat(response, containsString("{\"links\":["));
 
-        JsonObject result = JsonObject.readFrom(response);
+        JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
diff --git a/web/api/src/test/java/org/onosproject/rest/MetersResourceTest.java b/web/api/src/test/java/org/onosproject/rest/MetersResourceTest.java
index 21ca646..c03f7cc 100644
--- a/web/api/src/test/java/org/onosproject/rest/MetersResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/MetersResourceTest.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.rest;
 
+import com.eclipsesource.json.Json;
 import com.eclipsesource.json.JsonArray;
 import com.eclipsesource.json.JsonObject;
 import com.google.common.collect.ImmutableSet;
@@ -385,7 +386,7 @@
         replay(mockDeviceService);
         final WebResource rs = resource();
         final String response = rs.path("meters").get(String.class);
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
@@ -415,7 +416,7 @@
 
         final WebResource rs = resource();
         final String response = rs.path("meters/" + deviceId1.toString()).get(String.class);
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
@@ -441,7 +442,7 @@
         final WebResource rs = resource();
         final String response = rs.path("meters/" + deviceId3.toString()
                 + "/" + meter5.id().id()).get(String.class);
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
diff --git a/web/api/src/test/java/org/onosproject/rest/MetricsResourceTest.java b/web/api/src/test/java/org/onosproject/rest/MetricsResourceTest.java
index 49cfa89..256e3c0 100644
--- a/web/api/src/test/java/org/onosproject/rest/MetricsResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/MetricsResourceTest.java
@@ -19,6 +19,7 @@
 import com.codahale.metrics.Meter;
 import com.codahale.metrics.Metric;
 import com.codahale.metrics.Timer;
+import com.eclipsesource.json.Json;
 import com.eclipsesource.json.JsonArray;
 import com.eclipsesource.json.JsonObject;
 import com.google.common.collect.ImmutableMap;
@@ -109,7 +110,7 @@
         String response = rs.path("metrics").get(String.class);
         assertThat(response, containsString("{\"metrics\":["));
 
-        JsonObject result = JsonObject.readFrom(response);
+        JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         JsonArray jsonMetrics = result.get("metrics").asArray();
diff --git a/web/api/src/test/java/org/onosproject/rest/PathsResourceTest.java b/web/api/src/test/java/org/onosproject/rest/PathsResourceTest.java
index 19b5f2a..e2ff8a0 100644
--- a/web/api/src/test/java/org/onosproject/rest/PathsResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/PathsResourceTest.java
@@ -20,6 +20,7 @@
 import java.nio.charset.StandardCharsets;
 import java.util.Set;
 
+import com.eclipsesource.json.Json;
 import org.hamcrest.Description;
 import org.hamcrest.TypeSafeDiagnosingMatcher;
 import org.junit.After;
@@ -179,7 +180,7 @@
         String response = rs.path(url).get(String.class);
         assertThat(response, containsString("{\"paths\":["));
 
-        JsonObject result = JsonObject.readFrom(response);
+        JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
diff --git a/web/api/src/test/java/org/onosproject/rest/StatisticsResourceTest.java b/web/api/src/test/java/org/onosproject/rest/StatisticsResourceTest.java
index af64224..65ebd7d 100644
--- a/web/api/src/test/java/org/onosproject/rest/StatisticsResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/StatisticsResourceTest.java
@@ -18,6 +18,7 @@
 import java.util.HashMap;
 import java.util.stream.IntStream;
 
+import com.eclipsesource.json.Json;
 import org.junit.Before;
 import org.junit.Test;
 import org.onlab.osgi.ServiceDirectory;
@@ -126,7 +127,7 @@
                 .queryParam("port", "2")
                 .get(String.class);
 
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
@@ -148,7 +149,7 @@
         final WebResource rs = resource();
         final String response = rs.path("statistics/flows/link/").get(String.class);
 
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
diff --git a/web/api/src/test/java/org/onosproject/rest/TopologyResourceTest.java b/web/api/src/test/java/org/onosproject/rest/TopologyResourceTest.java
index da5f969..ddbca8d 100644
--- a/web/api/src/test/java/org/onosproject/rest/TopologyResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/TopologyResourceTest.java
@@ -17,6 +17,7 @@
 
 import java.util.Set;
 
+import com.eclipsesource.json.Json;
 import org.junit.Before;
 import org.junit.Test;
 import org.onlab.osgi.ServiceDirectory;
@@ -167,7 +168,7 @@
     public void getTopology() {
         WebResource rs = resource();
         String response = rs.path("topology").get(String.class);
-        JsonObject result = JsonObject.readFrom(response);
+        JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(4));
@@ -185,7 +186,7 @@
     public void getTopologyClusters() {
         WebResource rs = resource();
         String response = rs.path("topology/clusters").get(String.class);
-        JsonObject result = JsonObject.readFrom(response);
+        JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.names(), hasSize(1));
@@ -201,7 +202,7 @@
     public void getCluster() {
         WebResource rs = resource();
         String response = rs.path("topology/clusters/0").get(String.class);
-        JsonObject result = JsonObject.readFrom(response);
+        JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.get("id").asLong(), is(0L));
@@ -219,7 +220,7 @@
     public void getClusterDevices() {
         WebResource rs = resource();
         String response = rs.path("topology/clusters/0/devices").get(String.class);
-        JsonObject result = JsonObject.readFrom(response);
+        JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         JsonArray devices = result.get("devices").asArray();
@@ -236,7 +237,7 @@
     public void getClusterLinks() {
         WebResource rs = resource();
         String response = rs.path("topology/clusters/1/links").get(String.class);
-        JsonObject result = JsonObject.readFrom(response);
+        JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         JsonArray links = result.get("links").asArray();
@@ -260,7 +261,7 @@
     public void getBroadcast() {
         WebResource rs = resource();
         String response = rs.path("topology/broadcast/dev1:1").get(String.class);
-        JsonObject result = JsonObject.readFrom(response);
+        JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.get("broadcast").asBoolean(), is(true));
@@ -273,7 +274,7 @@
     public void getInfrastructure() {
         WebResource rs = resource();
         String response = rs.path("topology/infrastructure/dev2:1").get(String.class);
-        JsonObject result = JsonObject.readFrom(response);
+        JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
 
         assertThat(result.get("infrastructure").asBoolean(), is(true));
diff --git a/web/api/src/test/java/org/onosproject/rest/resources/NetworkConfigWebResourceTest.java b/web/api/src/test/java/org/onosproject/rest/resources/NetworkConfigWebResourceTest.java
index a983fc2..569cc6a 100644
--- a/web/api/src/test/java/org/onosproject/rest/resources/NetworkConfigWebResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/resources/NetworkConfigWebResourceTest.java
@@ -19,6 +19,7 @@
 import java.util.HashSet;
 import java.util.Set;
 
+import com.eclipsesource.json.Json;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -269,7 +270,7 @@
         final WebResource rs = resource();
         final String response = rs.path("network/configuration").get(String.class);
 
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         Assert.assertThat(result, notNullValue());
 
         Assert.assertThat(result.names(), hasSize(2));
@@ -296,7 +297,7 @@
         final WebResource rs = resource();
         final String response = rs.path("network/configuration/devices").get(String.class);
 
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         Assert.assertThat(result, notNullValue());
 
         Assert.assertThat(result.names(), hasSize(1));
@@ -322,7 +323,7 @@
                 rs.path("network/configuration/devices/device1")
                         .get(String.class);
 
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         Assert.assertThat(result, notNullValue());
 
         Assert.assertThat(result.names(), hasSize(1));
@@ -345,7 +346,7 @@
                 rs.path("network/configuration/devices/device1/basic")
                         .get(String.class);
 
-        final JsonObject result = JsonObject.readFrom(response);
+        final JsonObject result = Json.parse(response).asObject();
         Assert.assertThat(result, notNullValue());
 
         Assert.assertThat(result.names(), hasSize(2));
