Upgrade fasterXML libraries for OS-9

Upgrade fasterXML to version 2.9.5 to address security vulnerability
Wrap calls to treeRead(InputStream) to handle new behavior of null streams

Change-Id: Id199cfacd0cf9e5371dc33de9f1e058c2e72eaa5
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/ApplicationsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/ApplicationsWebResource.java
index 4a71ffd..24ad50a 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/ApplicationsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/ApplicationsWebResource.java
@@ -39,6 +39,7 @@
 import java.util.Set;
 
 import static org.onlab.util.Tools.nullIsNotFound;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 /**
  * Manage inventory of applications.
@@ -96,7 +97,7 @@
     public Response installApp(InputStream raw) {
         Application app;
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(raw);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), raw);
             URL url = new URL(jsonTree.get(URL).asText());
             boolean activate = false;
             if (jsonTree.has(ACTIVATE)) {
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/ClusterWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/ClusterWebResource.java
index 4ffb445..664f0eb 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/ClusterWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/ClusterWebResource.java
@@ -38,6 +38,7 @@
 import java.util.List;
 
 import static org.onlab.util.Tools.nullIsNotFound;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 /**
  * Manage cluster of ONOS instances.
@@ -92,7 +93,7 @@
     @Produces(MediaType.APPLICATION_JSON)
     public Response formCluster(InputStream config) throws IOException {
         JsonCodec<ControllerNode> codec = codec(ControllerNode.class);
-        ObjectNode root = (ObjectNode) mapper().readTree(config);
+        ObjectNode root = readTreeFromStream(mapper(), config);
 
         List<ControllerNode> nodes = codec.decode((ArrayNode) root.path("nodes"), this);
         JsonNode partitionSizeNode = root.get("partitionSize");
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/ComponentConfigWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/ComponentConfigWebResource.java
index 13b8375..9d3bcca 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/ComponentConfigWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/ComponentConfigWebResource.java
@@ -39,6 +39,7 @@
 import java.util.Set;
 
 import static org.onlab.util.Tools.nullIsNotFound;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 /**
  * Manage component configurations.
@@ -105,7 +106,7 @@
                                @DefaultValue("false") @QueryParam("preset") boolean preset,
                                InputStream request) throws IOException {
         ComponentConfigService service = get(ComponentConfigService.class);
-        ObjectNode props = (ObjectNode) mapper().readTree(request);
+        ObjectNode props = readTreeFromStream(mapper(), request);
         List<String> errorMsgs = new ArrayList<String>();
         if (preset) {
                 props.fieldNames().forEachRemaining(k -> {
@@ -151,7 +152,7 @@
     public Response unsetConfigs(@PathParam("component") String component,
                                  InputStream request) throws IOException {
         ComponentConfigService service = get(ComponentConfigService.class);
-        ObjectNode props = (ObjectNode) mapper().readTree(request);
+        ObjectNode props = readTreeFromStream(mapper(), request);
         props.fieldNames().forEachRemaining(k -> service.unsetProperty(component, k));
         return Response.noContent().build();
     }
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/DeviceKeyWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/DeviceKeyWebResource.java
index 52f8ae7..2bed18b 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/DeviceKeyWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/DeviceKeyWebResource.java
@@ -39,6 +39,7 @@
 import java.io.InputStream;
 
 import static org.onlab.util.Tools.nullIsNotFound;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 /**
  * Query and Manage Device Keys.
@@ -96,7 +97,7 @@
     public Response addDeviceKey(InputStream stream) {
         try {
             DeviceKeyAdminService service = get(DeviceKeyAdminService.class);
-            ObjectNode root = (ObjectNode) mapper().readTree(stream);
+            ObjectNode root = readTreeFromStream(mapper(), stream);
             DeviceKey deviceKey = codec(DeviceKey.class).decode(root, this);
             service.addKey(deviceKey);
 
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/DpisWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/DpisWebResource.java
index d3ff886..b59c7e8 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/DpisWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/DpisWebResource.java
@@ -40,6 +40,7 @@
 import java.util.List;
 import java.util.stream.Collectors;
 
+import static org.onlab.util.Tools.readTreeFromStream;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -292,7 +293,7 @@
         ObjectNode result;
 
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             log.debug("jsonTree={}", jsonTree);
 
             DpiStatistics ds = codec(DpiStatistics.class).decode(jsonTree, this);
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/FlowObjectiveWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/FlowObjectiveWebResource.java
index e6f7e9c..56a4755 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/FlowObjectiveWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/FlowObjectiveWebResource.java
@@ -39,6 +39,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 
+import static org.onlab.util.Tools.readTreeFromStream;
+
 /**
  * Manage flow objectives.
  */
@@ -74,7 +76,7 @@
                                              InputStream stream) {
         try {
             UriBuilder locationBuilder = null;
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             validateDeviceId(deviceId, jsonTree);
 
             if (appId != null) {
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/FlowsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/FlowsWebResource.java
index 1bc7e98..f70382d 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/FlowsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/FlowsWebResource.java
@@ -52,6 +52,7 @@
 
 import static org.onlab.util.Tools.nullIsIllegal;
 import static org.onlab.util.Tools.nullIsNotFound;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 /**
  * Query and program flow rules.
@@ -113,7 +114,7 @@
     @Produces(MediaType.APPLICATION_JSON)
     public Response createFlows(@QueryParam("appId") String appId, InputStream stream) {
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             ArrayNode flowsArray = nullIsIllegal((ArrayNode) jsonTree.get(FLOWS),
                                                  FLOW_ARRAY_REQUIRED);
 
@@ -248,7 +249,7 @@
                                @QueryParam("appId") String appId,
                                InputStream stream) {
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             JsonNode specifiedDeviceId = jsonTree.get("deviceId");
             if (specifiedDeviceId != null &&
                     !specifiedDeviceId.asText().equals(deviceId)) {
@@ -312,7 +313,7 @@
         List<FlowEntry> rulesToRemove = new ArrayList<>();
 
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
 
             JsonNode jsonFlows = jsonTree.get("flows");
 
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/GroupsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/GroupsWebResource.java
index 1af502b..a0875d5 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/GroupsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/GroupsWebResource.java
@@ -46,6 +46,7 @@
 
 import org.onlab.util.HexString;
 import static org.onlab.util.Tools.nullIsNotFound;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 /**
  * Query and program group rules.
@@ -148,7 +149,7 @@
                                 InputStream stream) {
         try {
 
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             JsonNode specifiedDeviceId = jsonTree.get("deviceId");
 
             if (specifiedDeviceId != null &&
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/HostsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/HostsWebResource.java
index 26adef8..3e5dc21 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/HostsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/HostsWebResource.java
@@ -57,6 +57,7 @@
 import java.util.Set;
 
 import static org.onlab.util.Tools.nullIsNotFound;
+import static org.onlab.util.Tools.readTreeFromStream;
 import static org.onosproject.net.HostId.hostId;
 
 /**
@@ -139,7 +140,7 @@
         URI location;
         try {
             // Parse the input stream
-            ObjectNode root = (ObjectNode) mapper().readTree(stream);
+            ObjectNode root = readTreeFromStream(mapper(), stream);
 
             HostProviderRegistry hostProviderRegistry = get(HostProviderRegistry.class);
             InternalHostProvider hostProvider = new InternalHostProvider();
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/IntentsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/IntentsWebResource.java
index 278fa07..297f70e 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/IntentsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/IntentsWebResource.java
@@ -57,6 +57,7 @@
 import java.util.concurrent.TimeUnit;
 
 import static org.onlab.util.Tools.nullIsNotFound;
+import static org.onlab.util.Tools.readTreeFromStream;
 import static org.onosproject.net.intent.IntentState.FAILED;
 import static org.onosproject.net.intent.IntentState.WITHDRAWN;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -297,7 +298,7 @@
     public Response createIntent(InputStream stream) {
         try {
             IntentService service = get(IntentService.class);
-            ObjectNode root = (ObjectNode) mapper().readTree(stream);
+            ObjectNode root = readTreeFromStream(mapper(), stream);
             Intent intent = codec(Intent.class).decode(root, this);
             service.submit(intent);
             UriBuilder locationBuilder = uriInfo.getBaseUriBuilder()
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/MastershipWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/MastershipWebResource.java
index 99ec5a4..cfd0f26 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/MastershipWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/MastershipWebResource.java
@@ -40,6 +40,7 @@
 import java.util.Set;
 
 import static org.onlab.util.Tools.nullIsNotFound;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 /**
  * Manage the mastership of ONOS instances.
@@ -190,7 +191,7 @@
     public Response setRole(InputStream stream) {
 
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             JsonNode deviceIdJson = jsonTree.get(DEVICE_ID);
             JsonNode nodeIdJson = jsonTree.get(NODE_ID);
             MastershipRole role = codec(MastershipRole.class).decode(jsonTree, this);
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java
index 31f91c7..6fbe1b3 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java
@@ -44,6 +44,7 @@
 import java.io.InputStream;
 
 import static org.onlab.util.Tools.nullIsNotFound;
+import static org.onlab.util.Tools.readTreeFromStream;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -138,7 +139,7 @@
     public Response createMeter(@PathParam("deviceId") String deviceId,
                                 InputStream stream) {
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             JsonNode specifiedDeviceId = jsonTree.get("deviceId");
 
             if ((specifiedDeviceId != null &&
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/MulticastRouteWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/MulticastRouteWebResource.java
index 374605b..cdfd76e 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/MulticastRouteWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/MulticastRouteWebResource.java
@@ -25,6 +25,7 @@
 import org.onosproject.rest.AbstractWebResource;
 
 import static org.onlab.util.Tools.nullIsNotFound;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
@@ -79,7 +80,7 @@
         final String ingressStr = "ingress";
         MulticastRouteService service = get(MulticastRouteService.class);
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             McastRoute route = codec(McastRoute.class).decode(jsonTree, this);
             service.add(route);
             if (jsonTree.has(ingressStr)) {
@@ -110,7 +111,7 @@
     public Response deleteRoute(InputStream stream) {
         MulticastRouteService service = get(MulticastRouteService.class);
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             McastRoute route = codec(McastRoute.class).decode(jsonTree, this);
             service.remove(route);
         } catch (IOException ex) {
@@ -141,7 +142,7 @@
         try {
             McastRoute route = new McastRoute(IpAddress.valueOf(source), IpAddress.valueOf(group),
                     McastRoute.Type.STATIC);
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
 
             jsonTree.path("sinks").forEach(node -> {
                 ConnectPoint sink = ConnectPoint.deviceConnectPoint(node.asText());
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/NetworkConfigWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/NetworkConfigWebResource.java
index 8aacbb6..e50e011 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/NetworkConfigWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/NetworkConfigWebResource.java
@@ -41,6 +41,7 @@
 
 import static org.onlab.util.Tools.emptyIsNotFound;
 import static org.onlab.util.Tools.nullIsNotFound;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 /**
  * Manage network configurations.
@@ -207,7 +208,7 @@
     @SuppressWarnings("unchecked")
     public Response upload(InputStream request) throws IOException {
         NetworkConfigService service = get(NetworkConfigService.class);
-        ObjectNode root = (ObjectNode) mapper().readTree(request);
+        ObjectNode root = readTreeFromStream(mapper(), request);
         List<String> errorMsgs = new ArrayList<String>();
         root.fieldNames()
                 .forEachRemaining(sk -> {
@@ -241,7 +242,7 @@
     public Response upload(@PathParam("subjectClassKey") String subjectClassKey,
                            InputStream request) throws IOException {
         NetworkConfigService service = get(NetworkConfigService.class);
-        ObjectNode root = (ObjectNode) mapper().readTree(request);
+        ObjectNode root = readTreeFromStream(mapper(), request);
         SubjectFactory subjectFactory =
                 nullIsNotFound(service.getSubjectFactory(subjectClassKey),
                         subjectClassNotValidErrorString(subjectClassKey));
@@ -269,7 +270,7 @@
                            @PathParam("subjectKey") String subjectKey,
                            InputStream request) throws IOException {
         NetworkConfigService service = get(NetworkConfigService.class);
-        ObjectNode root = (ObjectNode) mapper().readTree(request);
+        ObjectNode root = readTreeFromStream(mapper(), request);
         SubjectFactory subjectFactory =
                 nullIsNotFound(service.getSubjectFactory(subjectClassKey),
                         subjectClassNotValidErrorString(subjectClassKey));
@@ -301,7 +302,7 @@
                            @PathParam("configKey") String configKey,
                            InputStream request) throws IOException {
         NetworkConfigService service = get(NetworkConfigService.class);
-        JsonNode root = mapper().readTree(request);
+        JsonNode root = readTreeFromStream(mapper(), request);
         SubjectFactory subjectFactory =
                 nullIsNotFound(service.getSubjectFactory(subjectClassKey),
                         subjectClassNotValidErrorString(subjectClassKey));
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/RegionsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/RegionsWebResource.java
index 5f1119e..04fb8ad 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/RegionsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/RegionsWebResource.java
@@ -43,6 +43,7 @@
 import java.util.Set;
 
 import static org.onlab.util.Tools.nullIsNotFound;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 /**
  * Manages region and device membership.
@@ -119,7 +120,7 @@
     public Response createRegion(InputStream stream) {
         URI location;
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             final Region region = codec(Region.class).decode(jsonTree, this);
             final Region resultRegion = regionAdminService.createRegion(region.id(),
                                 region.name(), region.type(), region.masters());
@@ -146,7 +147,7 @@
     public Response updateRegion(@PathParam("regionId") String regionId,
                                  InputStream stream) {
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             JsonNode specifiedRegionId = jsonTree.get("id");
 
             if (specifiedRegionId != null &&
@@ -242,7 +243,7 @@
      * @throws IOException
      */
     private Set<DeviceId> extractDeviceIds(InputStream stream) throws IOException {
-        ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+        ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
         JsonNode deviceIdsJson = jsonTree.get("deviceIds");
 
         if (deviceIdsJson == null || deviceIdsJson.size() == 0) {
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/TenantWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/TenantWebResource.java
index 6e7627e..9250edf 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/TenantWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/TenantWebResource.java
@@ -38,6 +38,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 
+import static org.onlab.util.Tools.readTreeFromStream;
+
 /**
  * Query and manage tenants of virtual networks.
  */
@@ -116,7 +118,7 @@
      * @throws IOException if unable to parse the request
      */
     private TenantId getTenantIdFromJsonStream(InputStream stream) throws IOException {
-        ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+        ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
         JsonNode specifiedTenantId = jsonTree.get("id");
 
         if (specifiedTenantId == null) {
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/VirtualNetworkWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/VirtualNetworkWebResource.java
index d9b39f7..0e3504c 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/VirtualNetworkWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/VirtualNetworkWebResource.java
@@ -51,6 +51,8 @@
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import static org.onlab.util.Tools.readTreeFromStream;
+
 /**
  * Query and Manage Virtual Network elements.
  */
@@ -176,7 +178,7 @@
     public Response createVirtualDevice(@PathParam("networkId") long networkId,
                                         InputStream stream) {
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             final VirtualDevice vdevReq = codec(VirtualDevice.class).decode(jsonTree, this);
             JsonNode specifiedNetworkId = jsonTree.get("networkId");
             if (specifiedNetworkId == null || specifiedNetworkId.asLong() != (networkId)) {
@@ -250,7 +252,7 @@
                                       @PathParam("deviceId") String virtDeviceId,
                                       InputStream stream) {
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
 //            final VirtualPort vportReq = codec(VirtualPort.class).decode(jsonTree, this);
             JsonNode specifiedNetworkId = jsonTree.get("networkId");
             JsonNode specifiedDeviceId = jsonTree.get("deviceId");
@@ -335,7 +337,7 @@
     public Response createVirtualLink(@PathParam("networkId") long networkId,
                                       InputStream stream) {
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             JsonNode specifiedNetworkId = jsonTree.get("networkId");
             if (specifiedNetworkId == null || specifiedNetworkId.asLong() != (networkId)) {
                 throw new IllegalArgumentException(INVALID_FIELD + "networkId");
@@ -368,7 +370,7 @@
     public Response removeVirtualLink(@PathParam("networkId") long networkId,
                                       InputStream stream) {
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             JsonNode specifiedNetworkId = jsonTree.get("networkId");
             if (specifiedNetworkId != null &&
                     specifiedNetworkId.asLong() != (networkId)) {
@@ -416,7 +418,7 @@
     public Response createVirtualHost(@PathParam("networkId") long networkId,
                                       InputStream stream) {
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             JsonNode specifiedNetworkId = jsonTree.get("networkId");
             if (specifiedNetworkId == null || specifiedNetworkId.asLong() != (networkId)) {
                 throw new IllegalArgumentException(INVALID_FIELD + "networkId");
@@ -450,7 +452,7 @@
     public Response removeVirtualHost(@PathParam("networkId") long networkId,
                                       InputStream stream) {
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             JsonNode specifiedNetworkId = jsonTree.get("networkId");
             if (specifiedNetworkId != null &&
                     specifiedNetworkId.asLong() != (networkId)) {
@@ -474,7 +476,7 @@
      * @throws IOException if unable to parse the request
      */
     private JsonNode getFromJsonStream(InputStream stream, String jsonFieldName) throws IOException {
-        ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+        ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
         JsonNode jsonNode = jsonTree.get(jsonFieldName);
 
         if (jsonNode == null) {
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyResource.java b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyResource.java
index 7fed76b..e0b629c 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyResource.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyResource.java
@@ -32,6 +32,7 @@
 import java.io.InputStream;
 import java.util.Map;
 
+import static org.onlab.util.Tools.readTreeFromStream;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -114,7 +115,7 @@
     @Consumes("application/json")
     @Deprecated
     public Response setSprites(InputStream stream) throws IOException {
-        JsonNode root = mapper.readTree(stream);
+        JsonNode root = readTreeFromStream(mapper, stream);
         String name = root.path("defn_name").asText("sprites");
         get(SpriteService.class).put(name, root);
         return Response.ok().build();