diff --git a/web/api/src/test/java/org/onosproject/rest/resources/FlowsResourceTest.java b/web/api/src/test/java/org/onosproject/rest/resources/FlowsResourceTest.java
index 6b9a8ee..00d9fad 100644
--- a/web/api/src/test/java/org/onosproject/rest/resources/FlowsResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/resources/FlowsResourceTest.java
@@ -52,9 +52,9 @@
 import org.onosproject.net.flow.DefaultTrafficSelector;
 import org.onosproject.net.flow.DefaultTrafficTreatment;
 import org.onosproject.net.flow.FlowEntry;
+import org.onosproject.net.flow.FlowEntryAdapter;
 import org.onosproject.net.flow.FlowId;
 import org.onosproject.net.flow.FlowRule;
-import org.onosproject.net.flow.FlowRuleExtPayLoad;
 import org.onosproject.net.flow.FlowRuleService;
 import org.onosproject.net.flow.TrafficSelector;
 import org.onosproject.net.flow.TrafficTreatment;
@@ -119,7 +119,7 @@
     /**
      * Mock class for a flow entry.
      */
-    private static class MockFlowEntry implements FlowEntry {
+    private static class MockFlowEntry extends FlowEntryAdapter {
         final DeviceId deviceId;
         final long baseValue;
         TrafficTreatment treatment;
@@ -166,16 +166,6 @@
         }
 
         @Override
-        public int errType() {
-            return 0;
-        }
-
-        @Override
-        public int errCode() {
-            return 0;
-        }
-
-        @Override
         public FlowId id() {
             final long id = baseValue + 55;
             return FlowId.valueOf(id);
@@ -217,34 +207,9 @@
         }
 
         @Override
-        public int hardTimeout() {
-            return 0;
-        }
-
-        @Override
         public FlowRemoveReason reason() {
             return  FlowRemoveReason.NO_REASON;
         }
-
-        @Override
-        public boolean isPermanent() {
-            return false;
-        }
-
-        @Override
-        public int tableId() {
-            return 0;
-        }
-
-        @Override
-        public boolean exactMatch(FlowRule rule) {
-            return false;
-        }
-
-        @Override
-        public FlowRuleExtPayLoad payLoad() {
-            return null;
-        }
     }
 
 
diff --git a/web/api/src/test/java/org/onosproject/rest/resources/IntentsResourceTest.java b/web/api/src/test/java/org/onosproject/rest/resources/IntentsResourceTest.java
index 623db9c..8d5c55f 100644
--- a/web/api/src/test/java/org/onosproject/rest/resources/IntentsResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/resources/IntentsResourceTest.java
@@ -41,6 +41,7 @@
 import org.onosproject.net.flow.DefaultTrafficSelector;
 import org.onosproject.net.flow.DefaultTrafficTreatment;
 import org.onosproject.net.flow.FlowEntry;
+import org.onosproject.net.flow.FlowEntryAdapter;
 import org.onosproject.net.flow.FlowId;
 import org.onosproject.net.flow.FlowRule;
 import org.onosproject.net.flow.FlowRuleExtPayLoad;
@@ -142,7 +143,7 @@
     /**
      * Mock class for a flow entry.
      */
-    private static class MockFlowEntry implements FlowEntry {
+    private static class MockFlowEntry extends FlowEntryAdapter {
         final DeviceId deviceId;
         final long baseValue;
         TrafficTreatment treatment;
@@ -158,21 +159,11 @@
         }
 
         @Override
-        public FlowEntryState state() {
-            return FlowEntryState.ADDED;
-        }
-
-        @Override
         public long life() {
             return life(SECONDS);
         }
 
         @Override
-        public FlowLiveType liveType() {
-            return null;
-        }
-
-        @Override
         public long life(TimeUnit timeUnit) {
             return SECONDS.convert(baseValue + 11, timeUnit);
         }
@@ -193,16 +184,6 @@
         }
 
         @Override
-        public int errType() {
-            return 0;
-        }
-
-        @Override
-        public int errCode() {
-            return 0;
-        }
-
-        @Override
         public FlowId id() {
             final long id = baseValue + 55;
             return FlowId.valueOf(id);
@@ -243,25 +224,6 @@
             return (int) (baseValue + 77);
         }
 
-        @Override
-        public int hardTimeout() {
-            return 0;
-        }
-
-        @Override
-        public FlowRule.FlowRemoveReason reason() {
-            return  FlowRule.FlowRemoveReason.NO_REASON;
-        }
-
-        @Override
-        public boolean isPermanent() {
-            return false;
-        }
-
-        @Override
-        public int tableId() {
-            return 0;
-        }
 
         @Override
         public boolean exactMatch(FlowRule rule) {
@@ -273,11 +235,6 @@
         }
 
         @Override
-        public FlowRuleExtPayLoad payLoad() {
-            return null;
-        }
-
-        @Override
         public String toString() {
             return id().id().toString();
         }
