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/apps/acl/src/main/java/org/onosproject/acl/AclWebResource.java b/apps/acl/src/main/java/org/onosproject/acl/AclWebResource.java
index ff58ba6..0cda20b 100644
--- a/apps/acl/src/main/java/org/onosproject/acl/AclWebResource.java
+++ b/apps/acl/src/main/java/org/onosproject/acl/AclWebResource.java
@@ -42,6 +42,8 @@
 import java.net.URISyntaxException;
 import java.util.List;
 
+import static org.onlab.util.Tools.readTreeFromStream;
+
 /**
  * Manage ACL rules.
  */
@@ -141,7 +143,7 @@
     private AclRule jsonToRule(InputStream stream) {
         JsonNode node;
         try {
-            node = mapper().readTree(stream);
+            node = readTreeFromStream(mapper(), stream);
         } catch (IOException e) {
             throw new IllegalArgumentException("Unable to parse ACL request", e);
         }
diff --git a/apps/cpman/app/src/main/java/org/onosproject/cpman/rest/SystemMetricsCollectorWebResource.java b/apps/cpman/app/src/main/java/org/onosproject/cpman/rest/SystemMetricsCollectorWebResource.java
index dc7ea22..0fd18e0 100644
--- a/apps/cpman/app/src/main/java/org/onosproject/cpman/rest/SystemMetricsCollectorWebResource.java
+++ b/apps/cpman/app/src/main/java/org/onosproject/cpman/rest/SystemMetricsCollectorWebResource.java
@@ -46,6 +46,7 @@
 import java.util.stream.Collectors;
 
 import static org.onlab.util.Tools.nullIsIllegal;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 /**
  * Collect system metrics.
@@ -90,7 +91,7 @@
         ObjectNode root = mapper().createObjectNode();
         ControlMetric cm;
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
 
             if (jsonTree == null || !checkFields(jsonTree, CPU_FIELD_SET)) {
                 return ok(root).build();
@@ -151,7 +152,7 @@
         ObjectNode root = mapper().createObjectNode();
         ControlMetric cm;
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
 
             if (jsonTree == null || !checkFields(jsonTree, MEMORY_FIELD_SET)) {
                 return ok(root).build();
@@ -206,7 +207,7 @@
         ObjectNode root = mapper().createObjectNode();
         ControlMetric cm;
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             ArrayNode diskRes =
                     jsonTree.get("disks") == null ?
                             mapper().createArrayNode() : (ArrayNode) jsonTree.get("disks");
@@ -252,7 +253,7 @@
         ObjectNode root = mapper().createObjectNode();
         ControlMetric cm;
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
 
             ArrayNode networkRes = jsonTree.get("networks") == null
                     ? mapper().createArrayNode() : (ArrayNode) jsonTree.get("networks");
@@ -315,7 +316,7 @@
         ObjectNode root = mapper().createObjectNode();
 
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             JsonNode numOfCores = jsonTree.get("numOfCores");
             JsonNode numOfCpus = jsonTree.get("numOfCpus");
             JsonNode cpuSpeed = jsonTree.get("cpuSpeed");
diff --git a/apps/dhcp/app/src/main/java/org/onosproject/dhcp/rest/DhcpWebResource.java b/apps/dhcp/app/src/main/java/org/onosproject/dhcp/rest/DhcpWebResource.java
index 7cae850..fb4ee79 100644
--- a/apps/dhcp/app/src/main/java/org/onosproject/dhcp/rest/DhcpWebResource.java
+++ b/apps/dhcp/app/src/main/java/org/onosproject/dhcp/rest/DhcpWebResource.java
@@ -38,6 +38,7 @@
 import java.util.Date;
 import java.util.Map;
 
+import static org.onlab.util.Tools.readTreeFromStream;
 import static org.onosproject.dhcp.IpAssignment.AssignmentStatus.Option_Requested;
 
 /**
@@ -118,7 +119,7 @@
     public Response setMapping(InputStream stream) {
         ObjectNode root = mapper().createObjectNode();
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             JsonNode macID = jsonTree.get("mac");
             JsonNode ip = jsonTree.get("ip");
             if (macID != null && ip != null) {
diff --git a/apps/faultmanagement/fmweb/src/main/java/org/onosproject/faultmanagement/web/AlarmsWebResource.java b/apps/faultmanagement/fmweb/src/main/java/org/onosproject/faultmanagement/web/AlarmsWebResource.java
index 004f45b..6eb4117 100644
--- a/apps/faultmanagement/fmweb/src/main/java/org/onosproject/faultmanagement/web/AlarmsWebResource.java
+++ b/apps/faultmanagement/fmweb/src/main/java/org/onosproject/faultmanagement/web/AlarmsWebResource.java
@@ -43,6 +43,7 @@
 import org.onosproject.net.DeviceId;
 import org.slf4j.Logger;
 
+import static org.onlab.util.Tools.readTreeFromStream;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -121,7 +122,7 @@
         log.debug("PUT NEW ALARM at /{}", alarmIdPath);
 
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             log.debug("jsonTree={}", jsonTree);
 
             Alarm alarm = new AlarmCodec().decode(jsonTree, this);
diff --git a/apps/kafka-integration/web/src/main/java/org/onosproject/kafkaintegration/rest/EventExporterWebResource.java b/apps/kafka-integration/web/src/main/java/org/onosproject/kafkaintegration/rest/EventExporterWebResource.java
index 155a250..8f2c025 100644
--- a/apps/kafka-integration/web/src/main/java/org/onosproject/kafkaintegration/rest/EventExporterWebResource.java
+++ b/apps/kafka-integration/web/src/main/java/org/onosproject/kafkaintegration/rest/EventExporterWebResource.java
@@ -36,6 +36,7 @@
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 /**
  * Rest Interfaces for subscribing/unsubscribing to event notifications.
@@ -140,7 +141,7 @@
             throws IOException {
 
         ObjectMapper mapper = new ObjectMapper();
-        ObjectNode node = (ObjectNode) mapper.readTree(input);
+        ObjectNode node = readTreeFromStream(mapper, input);
         checkNotNull(node, JSON_NOT_NULL);
         EventSubscriber codec = codec(EventSubscriber.class).decode(node, this);
         checkNotNull(codec, JSON_NOT_NULL);
diff --git a/apps/ofagent/src/main/java/org/onosproject/ofagent/rest/OFAgentWebResource.java b/apps/ofagent/src/main/java/org/onosproject/ofagent/rest/OFAgentWebResource.java
index 26ca793..6b9f9eb 100644
--- a/apps/ofagent/src/main/java/org/onosproject/ofagent/rest/OFAgentWebResource.java
+++ b/apps/ofagent/src/main/java/org/onosproject/ofagent/rest/OFAgentWebResource.java
@@ -39,6 +39,7 @@
 import java.io.InputStream;
 
 import static javax.ws.rs.core.Response.Status.*;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 
 /**
@@ -117,7 +118,7 @@
     public Response createOFAgent(InputStream stream) throws IOException {
         OFAgentAdminService adminService = get(OFAgentAdminService.class);
 
-        OFAgent ofAgent = (new OFAgentCodec()).decode((ObjectNode) mapper().readTree(stream), this);
+        OFAgent ofAgent = (new OFAgentCodec()).decode(readTreeFromStream(mapper(), stream), this);
         if (ofAgent == null) {
             return Response.status(BAD_REQUEST)
                     .entity(OFAGENT_NOT_CREATED).build();
@@ -141,7 +142,7 @@
     public Response startOFAgent(InputStream stream) throws IOException {
         OFAgentAdminService adminService = get(OFAgentAdminService.class);
 
-        ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+        ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
         JsonNode networkId = jsonTree.get("networkId");
 
         if (networkId == null) {
@@ -170,7 +171,7 @@
     public Response updateOFAgent(InputStream stream) throws IOException {
         OFAgentAdminService adminService = get(OFAgentAdminService.class);
 
-        OFAgent ofAgent = (new OFAgentCodec()).decode((ObjectNode) mapper().readTree(stream), this);
+        OFAgent ofAgent = (new OFAgentCodec()).decode(readTreeFromStream(mapper(), stream), this);
 
         if (ofAgent == null) {
             return Response.status(NOT_FOUND)
@@ -199,7 +200,7 @@
     public Response stopOFAgent(InputStream stream) throws IOException {
 
         OFAgentAdminService adminService = get(OFAgentAdminService.class);
-        ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+        ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
         JsonNode networkId = jsonTree.get("networkId");
 
         if (get(OFAgentService.class).agent(NetworkId.networkId(networkId.asLong())) == null) {
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/OpenstackNodeWebResource.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/OpenstackNodeWebResource.java
index 9d311b2..a729fe5 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/OpenstackNodeWebResource.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/OpenstackNodeWebResource.java
@@ -46,6 +46,11 @@
 
 import static com.fasterxml.jackson.databind.SerializationFeature.INDENT_OUTPUT;
 import static javax.ws.rs.core.Response.created;
+import static org.onlab.util.Tools.readTreeFromStream;
+
+/**
+ * Handles REST API call of openstack node config.
+ */
 
 @Path("configure")
 public class OpenstackNodeWebResource extends AbstractWebResource {
@@ -140,7 +145,7 @@
     private Set<OpenstackNode> readNodeConfiguration(InputStream input) {
         Set<OpenstackNode> nodeSet = Sets.newHashSet();
         try {
-             JsonNode jsonTree = mapper().enable(INDENT_OUTPUT).readTree(input);
+             JsonNode jsonTree = readTreeFromStream(mapper().enable(INDENT_OUTPUT), input);
              ArrayNode nodes = (ArrayNode) jsonTree.path(NODES);
              nodes.forEach(node -> {
                  try {
diff --git a/apps/pce/pcerest/src/main/java/org/onosproject/pcerest/PcePathWebResource.java b/apps/pce/pcerest/src/main/java/org/onosproject/pcerest/PcePathWebResource.java
index be81702..de2e84a 100644
--- a/apps/pce/pcerest/src/main/java/org/onosproject/pcerest/PcePathWebResource.java
+++ b/apps/pce/pcerest/src/main/java/org/onosproject/pcerest/PcePathWebResource.java
@@ -17,6 +17,7 @@
 
 import static javax.ws.rs.core.Response.Status.OK;
 import static org.onlab.util.Tools.nullIsNotFound;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 import java.util.Collection;
 import java.io.IOException;
@@ -130,7 +131,7 @@
     public Response setupPath(InputStream stream) {
         log.debug("Setup path.");
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             JsonNode port = jsonTree.get("path");
             TunnelService tunnelService = get(TunnelService.class);
             PcePath path = codec(PcePath.class).decode((ObjectNode) port, this);
@@ -190,7 +191,7 @@
             final InputStream stream) {
         log.debug("Update path by identifier {}.", id);
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             JsonNode pathNode = jsonTree.get("path");
             PcePath path = codec(PcePath.class).decode((ObjectNode) pathNode, this);
             if (path == null) {
diff --git a/apps/restconf/utils/src/main/java/org/onosproject/restconf/utils/RestconfUtils.java b/apps/restconf/utils/src/main/java/org/onosproject/restconf/utils/RestconfUtils.java
index 2b7763d..7d07d73 100644
--- a/apps/restconf/utils/src/main/java/org/onosproject/restconf/utils/RestconfUtils.java
+++ b/apps/restconf/utils/src/main/java/org/onosproject/restconf/utils/RestconfUtils.java
@@ -50,6 +50,8 @@
 import static javax.ws.rs.core.Response.Status.NO_CONTENT;
 import static javax.ws.rs.core.Response.Status.OK;
 import static javax.ws.rs.core.Response.Status.REQUEST_TIMEOUT;
+import static org.onlab.util.Tools.readTreeFromStream;
+
 
 /**
  * Utilities used by the RESTCONF app.
@@ -82,7 +84,7 @@
         ObjectNode rootNode;
         ObjectMapper mapper = new ObjectMapper();
         try {
-            rootNode = (ObjectNode) mapper.readTree(inputStream);
+            rootNode = readTreeFromStream(mapper, inputStream);
         } catch (IOException e) {
             throw new RestconfUtilsException("ERROR: InputStream failed to parse");
         }
diff --git a/apps/route-service/app/src/main/java/org/onosproject/routeservice/rest/RouteServiceWebResource.java b/apps/route-service/app/src/main/java/org/onosproject/routeservice/rest/RouteServiceWebResource.java
index bc03799..eec7391 100644
--- a/apps/route-service/app/src/main/java/org/onosproject/routeservice/rest/RouteServiceWebResource.java
+++ b/apps/route-service/app/src/main/java/org/onosproject/routeservice/rest/RouteServiceWebResource.java
@@ -39,6 +39,8 @@
 
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
+import static org.onlab.util.Tools.readTreeFromStream;
+
 /**
  * Manage the unicast routing information.
  */
@@ -84,7 +86,7 @@
     public Response createRoute(InputStream route) {
         RouteAdminService service = get(RouteAdminService.class);
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(route);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), route);
             Route r = codec(Route.class).decode(jsonTree, this);
             service.update(Collections.singletonList(r));
         } catch (IOException ex) {
@@ -109,7 +111,7 @@
     public Response deleteRoute(InputStream route) {
         RouteAdminService service = get(RouteAdminService.class);
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(route);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), route);
             Route r = codec(Route.class).decode(jsonTree, this);
             service.withdraw(Collections.singletonList(r));
         } catch (IOException ex) {
diff --git a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/web/PolicyWebResource.java b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/web/PolicyWebResource.java
index abfba3c..bbe53d3 100644
--- a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/web/PolicyWebResource.java
+++ b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/web/PolicyWebResource.java
@@ -34,6 +34,8 @@
 import java.io.InputStream;
 import java.util.List;
 
+import static org.onlab.util.Tools.readTreeFromStream;
+
 /**
  * Query, create and remove segment routing plicies.
  */
@@ -70,7 +72,7 @@
     @Consumes(MediaType.APPLICATION_JSON)
     public Response createPolicy(InputStream input) throws IOException {
         ObjectMapper mapper = new ObjectMapper();
-        ObjectNode policyJson = (ObjectNode) mapper.readTree(input);
+        ObjectNode policyJson = readTreeFromStream(mapper, input);
         SegmentRoutingService srService = get(SegmentRoutingService.class);
         Policy policyInfo = POLICY_CODEC.decode(policyJson, this);
 
@@ -93,7 +95,7 @@
     @Consumes(MediaType.APPLICATION_JSON)
     public Response removePolicy(InputStream input) throws IOException {
         ObjectMapper mapper = new ObjectMapper();
-        ObjectNode policyJson = (ObjectNode) mapper.readTree(input);
+        ObjectNode policyJson = readTreeFromStream(mapper, input);
         SegmentRoutingService srService = get(SegmentRoutingService.class);
         Policy policyInfo = POLICY_CODEC.decode(policyJson, this);
         // TODO: Check the result
diff --git a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/web/TunnelWebResource.java b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/web/TunnelWebResource.java
index 7a368f5..2495f18 100644
--- a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/web/TunnelWebResource.java
+++ b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/web/TunnelWebResource.java
@@ -34,6 +34,8 @@
 import java.io.InputStream;
 import java.util.List;
 
+import static org.onlab.util.Tools.readTreeFromStream;
+
 /**
  * Query, create and remove segment routing tunnels.
  */
@@ -70,7 +72,7 @@
     @Consumes(MediaType.APPLICATION_JSON)
     public Response createTunnel(InputStream input) throws IOException {
         ObjectMapper mapper = new ObjectMapper();
-        ObjectNode tunnelJson = (ObjectNode) mapper.readTree(input);
+        ObjectNode tunnelJson = readTreeFromStream(mapper, input);
         SegmentRoutingService srService = get(SegmentRoutingService.class);
         Tunnel tunnelInfo = TUNNEL_CODEC.decode(tunnelJson, this);
         srService.createTunnel(tunnelInfo);
@@ -89,7 +91,7 @@
     @Consumes(MediaType.APPLICATION_JSON)
     public Response removeTunnel(InputStream input) throws IOException {
         ObjectMapper mapper = new ObjectMapper();
-        ObjectNode tunnelJson = (ObjectNode) mapper.readTree(input);
+        ObjectNode tunnelJson = readTreeFromStream(mapper, input);
         SegmentRoutingService srService = get(SegmentRoutingService.class);
         Tunnel tunnelInfo = TUNNEL_CODEC.decode(tunnelJson, this);
         srService.removeTunnel(tunnelInfo);
diff --git a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/FloatingIpWebResource.java b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/FloatingIpWebResource.java
index e958765..67af86e 100644
--- a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/FloatingIpWebResource.java
+++ b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/FloatingIpWebResource.java
@@ -60,6 +60,7 @@
 import static javax.ws.rs.core.Response.Status.CONFLICT;
 import static javax.ws.rs.core.Response.Status.CREATED;
 import static javax.ws.rs.core.Response.Status.NOT_FOUND;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 @Path("floatingips")
 public class FloatingIpWebResource extends AbstractWebResource {
@@ -114,7 +115,7 @@
     public Response createFloatingIp(final InputStream input) {
         try {
             ObjectMapper mapper = new ObjectMapper();
-            JsonNode subnode = mapper.readTree(input);
+            JsonNode subnode = readTreeFromStream(mapper, input);
             Collection<FloatingIp> floatingIps = createOrUpdateByInputStream(subnode);
             Boolean result = nullIsNotFound((get(FloatingIpService.class)
                                                     .createFloatingIps(floatingIps)),
@@ -137,7 +138,7 @@
                                      final InputStream input) {
         try {
             ObjectMapper mapper = new ObjectMapper();
-            JsonNode subnode = mapper.readTree(input);
+            JsonNode subnode = readTreeFromStream(mapper, input);
             Collection<FloatingIp> floatingIps = createOrUpdateByInputStream(subnode);
             Boolean result = nullIsNotFound(get(FloatingIpService.class)
                     .updateFloatingIps(floatingIps), UPDATE_FAIL);
diff --git a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/FlowClassifierWebResource.java b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/FlowClassifierWebResource.java
index 29e67c5..47e249f 100644
--- a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/FlowClassifierWebResource.java
+++ b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/FlowClassifierWebResource.java
@@ -17,6 +17,7 @@
 
 import static javax.ws.rs.core.Response.Status.OK;
 import static org.onlab.util.Tools.nullIsNotFound;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -107,7 +108,7 @@
     @Produces(MediaType.APPLICATION_JSON)
     public Response createFlowClassifier(InputStream stream) {
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             JsonNode flow = jsonTree.get("flow_classifier");
 
             FlowClassifier flowClassifier = codec(FlowClassifier.class).decode((ObjectNode) flow, this);
@@ -136,7 +137,7 @@
     public Response updateFlowClassifier(@PathParam("flow_id") String id, final InputStream stream) {
         try {
 
-            JsonNode jsonTree = mapper().readTree(stream);
+            JsonNode jsonTree = readTreeFromStream(mapper(), stream);
             JsonNode flow = jsonTree.get("flow_classifier");
             FlowClassifier flowClassifier = codec(FlowClassifier.class).decode((ObjectNode) flow, this);
             Boolean result = nullIsNotFound(get(FlowClassifierService.class).updateFlowClassifier(flowClassifier),
diff --git a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/PortChainWebResource.java b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/PortChainWebResource.java
index 0a6f6e7..1bfa44f 100644
--- a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/PortChainWebResource.java
+++ b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/PortChainWebResource.java
@@ -17,6 +17,7 @@
 
 import static javax.ws.rs.core.Response.Status.OK;
 import static org.onlab.util.Tools.nullIsNotFound;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -106,7 +107,7 @@
     @Produces(MediaType.APPLICATION_JSON)
     public Response createPortChain(InputStream stream) {
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             JsonNode port = jsonTree.get("port_chain");
             PortChain portChain = codec(PortChain.class).decode((ObjectNode) port, this);
             Boolean issuccess = nullIsNotFound(get(PortChainService.class).createPortChain(portChain),
@@ -132,7 +133,7 @@
     public Response updatePortPain(@PathParam("chain_id") String id,
                                    final InputStream stream) {
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             JsonNode port = jsonTree.get("port_chain");
             PortChain portChain = codec(PortChain.class).decode((ObjectNode) port, this);
             Boolean result = nullIsNotFound(get(PortChainService.class).updatePortChain(portChain),
diff --git a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/PortPairGroupWebResource.java b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/PortPairGroupWebResource.java
index 42b9563..91793ca 100644
--- a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/PortPairGroupWebResource.java
+++ b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/PortPairGroupWebResource.java
@@ -18,6 +18,7 @@
 
 import static javax.ws.rs.core.Response.Status.OK;
 import static org.onlab.util.Tools.nullIsNotFound;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -111,7 +112,7 @@
 
         try {
             ObjectMapper mapper = new ObjectMapper();
-            ObjectNode jsonTree = (ObjectNode) mapper.readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper, stream);
             JsonNode port = jsonTree.get("port_pair_group");
 
             PortPairGroup portPairGroup = codec(PortPairGroup.class).decode((ObjectNode) port, this);
@@ -139,7 +140,7 @@
                                         final InputStream stream) {
         try {
             ObjectMapper mapper = new ObjectMapper();
-            ObjectNode jsonTree = (ObjectNode) mapper.readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper, stream);
             JsonNode port = jsonTree.get("port_pair_group");
             PortPairGroup portPairGroup = codec(PortPairGroup.class).decode((ObjectNode) port, this);
             Boolean isSuccess = nullIsNotFound(get(PortPairGroupService.class).updatePortPairGroup(portPairGroup),
diff --git a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/PortPairWebResource.java b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/PortPairWebResource.java
index 96cf9ac..2c88f6f 100644
--- a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/PortPairWebResource.java
+++ b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/PortPairWebResource.java
@@ -18,6 +18,7 @@
 
 import static javax.ws.rs.core.Response.Status.OK;
 import static org.onlab.util.Tools.nullIsNotFound;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -105,7 +106,7 @@
     @Produces(MediaType.APPLICATION_JSON)
     public Response createPortPair(InputStream stream) {
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             JsonNode port = jsonTree.get("port_pair");
             PortPair portPair = codec(PortPair.class).decode((ObjectNode) port, this);
             Boolean isSuccess = nullIsNotFound(get(PortPairService.class).createPortPair(portPair),
@@ -131,7 +132,7 @@
     public Response updatePortPair(@PathParam("pair_id") String id,
                                    final InputStream stream) {
         try {
-            ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+            ObjectNode jsonTree = readTreeFromStream(mapper(), stream);
             JsonNode port = jsonTree.get("port_pair");
             PortPair portPair = codec(PortPair.class).decode((ObjectNode) port, this);
             Boolean isSuccess = nullIsNotFound(get(PortPairService.class).updatePortPair(portPair),
diff --git a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/RouterWebResource.java b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/RouterWebResource.java
index c09b5cd..fc8d7bc 100644
--- a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/RouterWebResource.java
+++ b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/RouterWebResource.java
@@ -68,6 +68,7 @@
 import static javax.ws.rs.core.Response.Status.CONFLICT;
 import static javax.ws.rs.core.Response.Status.CREATED;
 import static javax.ws.rs.core.Response.Status.NOT_FOUND;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 @Path("routers")
 public class RouterWebResource extends AbstractWebResource {
@@ -121,7 +122,7 @@
     public Response createRouter(final InputStream input) {
         try {
             ObjectMapper mapper = new ObjectMapper();
-            JsonNode subnode = mapper.readTree(input);
+            JsonNode subnode = readTreeFromStream(mapper, input);
             Collection<Router> routers = createOrUpdateByInputStream(subnode);
 
             Boolean result = nullIsNotFound((get(RouterService.class)
@@ -144,7 +145,7 @@
                                  final InputStream input) {
         try {
             ObjectMapper mapper = new ObjectMapper();
-            JsonNode subnode = mapper.readTree(input);
+            JsonNode subnode = readTreeFromStream(mapper, input);
             Collection<Router> routers = changeUpdateJsonToSub(subnode, id);
             Boolean result = nullIsNotFound(get(RouterService.class)
                     .updateRouters(routers), UPDATE_FAIL);
@@ -184,7 +185,7 @@
         }
         try {
             ObjectMapper mapper = new ObjectMapper();
-            JsonNode subnode = mapper.readTree(input);
+            JsonNode subnode = readTreeFromStream(mapper, input);
             if (!subnode.hasNonNull("id")) {
                 throw new IllegalArgumentException("id should not be null");
             } else if (subnode.get("id").asText().isEmpty()) {
@@ -233,7 +234,7 @@
         }
         try {
             ObjectMapper mapper = new ObjectMapper();
-            JsonNode subnode = mapper.readTree(input);
+            JsonNode subnode = readTreeFromStream(mapper, input);
             if (!subnode.hasNonNull("id")) {
                 throw new IllegalArgumentException("id should not be null");
             } else if (subnode.get("id").asText().isEmpty()) {
diff --git a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/SubnetWebResource.java b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/SubnetWebResource.java
index 2d122d7..b0951f4 100644
--- a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/SubnetWebResource.java
+++ b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/SubnetWebResource.java
@@ -19,6 +19,7 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR;
 import static javax.ws.rs.core.Response.Status.NOT_FOUND;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -109,7 +110,7 @@
 
         try {
             ObjectMapper mapper = new ObjectMapper();
-            JsonNode subnode = mapper.readTree(input);
+            JsonNode subnode = readTreeFromStream(mapper, input);
             Iterable<Subnet> subnets = createOrUpdateByInputStream(subnode);
             Boolean result = nullIsNotFound((get(SubnetService.class)
                                                     .createSubnets(subnets)),
@@ -134,7 +135,7 @@
                                  final InputStream input) {
         try {
             ObjectMapper mapper = new ObjectMapper();
-            JsonNode subnode = mapper.readTree(input);
+            JsonNode subnode = readTreeFromStream(mapper, input);
             Iterable<Subnet> subnets = createOrUpdateByInputStream(subnode);
             Boolean result = nullIsNotFound(get(SubnetService.class)
                     .updateSubnets(subnets), SUBNET_NOT_FOUND);
diff --git a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/TenantNetworkWebResource.java b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/TenantNetworkWebResource.java
index c984c4f..ef32818 100644
--- a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/TenantNetworkWebResource.java
+++ b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/TenantNetworkWebResource.java
@@ -58,6 +58,7 @@
 import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR;
 import static javax.ws.rs.core.Response.Status.NOT_FOUND;
 import static javax.ws.rs.core.Response.Status.OK;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 /**
  * REST resource for interacting with the inventory of networks.
@@ -170,7 +171,7 @@
     public Response createNetworks(InputStream input) {
         try {
             ObjectMapper mapper = new ObjectMapper();
-            JsonNode cfg = mapper.readTree(input);
+            JsonNode cfg = readTreeFromStream(mapper, input);
             JsonNode nodes = null;
             Iterable<TenantNetwork> networks = null;
             if (cfg.get("network") != null) {
@@ -207,7 +208,7 @@
     public Response updateNetworks(@PathParam("id") String id, InputStream input) {
         try {
             ObjectMapper mapper = new ObjectMapper();
-            JsonNode cfg = mapper.readTree(input);
+            JsonNode cfg = readTreeFromStream(mapper, input);
             JsonNode nodes = null;
             Iterable<TenantNetwork> networks = null;
             if (cfg.get("network") != null) {
diff --git a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/VirtualPortWebResource.java b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/VirtualPortWebResource.java
index cb5b7d6..8a89383 100644
--- a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/VirtualPortWebResource.java
+++ b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/VirtualPortWebResource.java
@@ -65,6 +65,7 @@
 import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR;
 import static javax.ws.rs.core.Response.Status.NOT_FOUND;
 import static javax.ws.rs.core.Response.Status.OK;
+import static org.onlab.util.Tools.readTreeFromStream;
 
 /**
  * REST resource for interacting with the inventory of infrastructure
@@ -113,7 +114,7 @@
     public Response createPorts(InputStream input) {
         try {
             ObjectMapper mapper = new ObjectMapper();
-            JsonNode cfg = mapper.readTree(input);
+            JsonNode cfg = readTreeFromStream(mapper, input);
             Iterable<VirtualPort> vPorts = createOrUpdateByInputStream(cfg);
             Boolean issuccess = nullIsNotFound(get(VirtualPortService.class)
                     .createPorts(vPorts), VPORT_NOT_FOUND);
@@ -162,7 +163,7 @@
     public Response updatePorts(@PathParam("id") String id, InputStream input) {
         try {
             ObjectMapper mapper = new ObjectMapper();
-            JsonNode cfg = mapper.readTree(input);
+            JsonNode cfg = readTreeFromStream(mapper, input);
             Iterable<VirtualPort> vPorts = createOrUpdateByInputStream(cfg);
             Boolean issuccess = nullIsNotFound(get(VirtualPortService.class)
                     .updatePorts(vPorts), VPORT_NOT_FOUND);