diff --git a/web/api/src/main/java/org/onosproject/rest/AbstractWebResource.java b/web/api/src/main/java/org/onosproject/rest/AbstractWebResource.java
index 0a8f2c1..49e4dca 100644
--- a/web/api/src/main/java/org/onosproject/rest/AbstractWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/AbstractWebResource.java
@@ -17,11 +17,10 @@
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.onlab.util.ItemNotFoundException;
+import org.onlab.rest.BaseResource;
 import org.onosproject.codec.CodecContext;
 import org.onosproject.codec.CodecService;
 import org.onosproject.codec.JsonCodec;
-import org.onlab.rest.BaseResource;
 
 /**
  * Abstract REST resource.
@@ -61,21 +60,4 @@
         return result;
     }
 
-    /**
-     * Returns the specified item if that items is null; otherwise throws
-     * not found exception.
-     *
-     * @param item    item to check
-     * @param message not found message
-     * @param <T>     item type
-     * @return item if not null
-     * @throws org.onlab.util.ItemNotFoundException if item is null
-     */
-    protected <T> T nullIsNotFound(T item, String message) {
-        if (item == null) {
-            throw new ItemNotFoundException(message);
-        }
-        return item;
-    }
-
 }
diff --git a/web/api/src/main/java/org/onosproject/rest/ClusterWebResource.java b/web/api/src/main/java/org/onosproject/rest/ClusterWebResource.java
index 5f2fde9..7f15bdc 100644
--- a/web/api/src/main/java/org/onosproject/rest/ClusterWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/ClusterWebResource.java
@@ -33,6 +33,8 @@
 import java.util.HashSet;
 import java.util.List;
 
+import static org.onlab.util.Tools.nullIsNotFound;
+
 /**
  * REST resource for interacting with the ONOS cluster subsystem.
  */
diff --git a/web/api/src/main/java/org/onosproject/rest/ComponentConfigWebResource.java b/web/api/src/main/java/org/onosproject/rest/ComponentConfigWebResource.java
index 07fe8a1..7de3d70 100644
--- a/web/api/src/main/java/org/onosproject/rest/ComponentConfigWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/ComponentConfigWebResource.java
@@ -29,6 +29,8 @@
 import java.io.InputStream;
 import java.util.Set;
 
+import static org.onlab.util.Tools.nullIsNotFound;
+
 /**
  * REST resource for cluster-wide component configuration.
  */
diff --git a/web/api/src/main/java/org/onosproject/rest/DevicesWebResource.java b/web/api/src/main/java/org/onosproject/rest/DevicesWebResource.java
index 3f8417b..91668d8 100644
--- a/web/api/src/main/java/org/onosproject/rest/DevicesWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/DevicesWebResource.java
@@ -27,6 +27,7 @@
 import java.util.List;
 
 import static com.google.common.base.Preconditions.checkNotNull;
+import static org.onlab.util.Tools.nullIsNotFound;
 import static org.onosproject.net.DeviceId.deviceId;
 
 /**
diff --git a/web/api/src/main/java/org/onosproject/rest/HostsWebResource.java b/web/api/src/main/java/org/onosproject/rest/HostsWebResource.java
index 925df13..58787de 100644
--- a/web/api/src/main/java/org/onosproject/rest/HostsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/HostsWebResource.java
@@ -27,6 +27,7 @@
 
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
+import static org.onlab.util.Tools.nullIsNotFound;
 import static org.onosproject.net.HostId.hostId;
 
 /**
diff --git a/web/api/src/main/java/org/onosproject/rest/IntentsWebResource.java b/web/api/src/main/java/org/onosproject/rest/IntentsWebResource.java
index 7e62953..9bbcd6b 100644
--- a/web/api/src/main/java/org/onosproject/rest/IntentsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/IntentsWebResource.java
@@ -41,6 +41,7 @@
 
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
+import static org.onlab.util.Tools.nullIsNotFound;
 import static org.onosproject.net.intent.IntentState.FAILED;
 import static org.onosproject.net.intent.IntentState.WITHDRAWN;
 import static org.slf4j.LoggerFactory.getLogger;
diff --git a/web/api/src/main/java/org/onosproject/rest/TopologyWebResource.java b/web/api/src/main/java/org/onosproject/rest/TopologyWebResource.java
index a10232c..c1a8fcf 100644
--- a/web/api/src/main/java/org/onosproject/rest/TopologyWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/TopologyWebResource.java
@@ -15,15 +15,9 @@
  */
 package org.onosproject.rest;
 
-import java.util.List;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.Lists;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.Link;
@@ -33,9 +27,15 @@
 import org.onosproject.net.topology.TopologyCluster;
 import org.onosproject.net.topology.TopologyService;
 
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.Lists;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.util.List;
+
+import static org.onlab.util.Tools.nullIsNotFound;
 
 /**
  * REST resource for interacting with the inventory of clusters.
@@ -55,8 +55,7 @@
     @Produces(MediaType.APPLICATION_JSON)
     public Response getTopology() {
         Topology topology = get(TopologyService.class).currentTopology();
-        ObjectNode root =
-                codec(Topology.class).encode(topology, this);
+        ObjectNode root = codec(Topology.class).encode(topology, this);
         return ok(root).build();
     }
 
@@ -69,11 +68,10 @@
     @Produces(MediaType.APPLICATION_JSON)
     @Path("clusters")
     public Response getClusters() {
-        Topology topology = get(TopologyService.class).currentTopology();
-        Iterable<TopologyCluster> clusters =
-                get(TopologyService.class).getClusters(topology);
-        ObjectNode root =
-                encodeArray(TopologyCluster.class, "clusters", clusters);
+        TopologyService service = get(TopologyService.class);
+        Topology topology = service.currentTopology();
+        Iterable<TopologyCluster> clusters = service.getClusters(topology);
+        ObjectNode root = encodeArray(TopologyCluster.class, "clusters", clusters);
         return ok(root).build();
     }
 
@@ -88,17 +86,18 @@
     @Path("clusters/{id}")
     public Response getCluster(@PathParam("id") int clusterId) {
         Topology topology = get(TopologyService.class).currentTopology();
-        TopologyCluster cluster =
-                nullIsNotFound(
-                        get(TopologyService.class)
-                                .getCluster(topology,
-                                        ClusterId.clusterId(clusterId)),
-                        CLUSTER_NOT_FOUND);
-        ObjectNode root =
-                codec(TopologyCluster.class).encode(cluster, this);
+        TopologyCluster cluster = getTopologyCluster(clusterId, topology);
+        ObjectNode root = codec(TopologyCluster.class).encode(cluster, this);
         return ok(root).build();
     }
 
+    private TopologyCluster getTopologyCluster(int clusterId, Topology topology) {
+        return nullIsNotFound(
+                get(TopologyService.class)
+                        .getCluster(topology, ClusterId.clusterId(clusterId)),
+                CLUSTER_NOT_FOUND);
+    }
+
     /**
      * Gets devices for a topology cluster for a REST GET operation.
      *
@@ -109,24 +108,16 @@
     @Produces(MediaType.APPLICATION_JSON)
     @Path("clusters/{id}/devices")
     public Response getClusterDevices(@PathParam("id") int clusterId) {
-        Topology topology = get(TopologyService.class).currentTopology();
-        TopologyCluster cluster =
-                nullIsNotFound(
-                        get(TopologyService.class)
-                                .getCluster(topology,
-                                        ClusterId.clusterId(clusterId)),
-                        CLUSTER_NOT_FOUND);
+        TopologyService service = get(TopologyService.class);
+        Topology topology = service.currentTopology();
+        TopologyCluster cluster = getTopologyCluster(clusterId, topology);
 
         List<DeviceId> deviceIds =
-                Lists.newArrayList(get(TopologyService.class)
-                        .getClusterDevices(topology, cluster));
+                Lists.newArrayList(service.getClusterDevices(topology, cluster));
 
         ObjectNode root = mapper().createObjectNode();
         ArrayNode devicesNode = root.putArray("devices");
-
-        for (DeviceId deviceId : deviceIds) {
-            devicesNode.add(deviceId.toString());
-        }
+        deviceIds.forEach(id -> devicesNode.add(id.toString()));
         return ok(root).build();
     }
 
@@ -141,10 +132,7 @@
     @Path("clusters/{id}/links")
     public Response getClusterLinks(@PathParam("id") int clusterId) {
         Topology topology = get(TopologyService.class).currentTopology();
-        TopologyCluster cluster =
-                nullIsNotFound(get(TopologyService.class).getCluster(topology,
-                                ClusterId.clusterId(clusterId)),
-                        CLUSTER_NOT_FOUND);
+        TopologyCluster cluster = getTopologyCluster(clusterId, topology);
 
         List<Link> links =
                 Lists.newArrayList(get(TopologyService.class)
