diff --git a/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/PortPairResourceTest.java b/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/PortPairResourceTest.java
index c4b02ed..e436bbe 100644
--- a/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/PortPairResourceTest.java
+++ b/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/PortPairResourceTest.java
@@ -15,25 +15,8 @@
  */
 package org.onosproject.vtnweb.resources;
 
-import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-import static org.hamcrest.Matchers.containsString;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.notNullValue;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
-
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.util.HashSet;
-import java.util.Objects;
-import java.util.Set;
-
-import javax.ws.rs.core.MediaType;
-
 import com.eclipsesource.json.Json;
+import com.eclipsesource.json.JsonObject;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -47,10 +30,26 @@
 import org.onosproject.vtnrsc.portpair.PortPairService;
 import org.onosproject.vtnweb.web.SfcCodecContext;
 
-import com.eclipsesource.json.JsonObject;
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.UniformInterfaceException;
-import com.sun.jersey.api.client.WebResource;
+import javax.ws.rs.NotFoundException;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
+
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
 /**
  * Unit tests for port pair REST APIs.
  */
@@ -155,8 +154,8 @@
 
         expect(portPairService.getPortPairs()).andReturn(null).anyTimes();
         replay(portPairService);
-        final WebResource rs = resource();
-        final String response = rs.path("port_pairs").get(String.class);
+        final WebTarget wt = target();
+        final String response = wt.path("port_pairs").request().get(String.class);
         assertThat(response, is("{\"port_pairs\":[]}"));
     }
 
@@ -173,8 +172,9 @@
         expect(portPairService.getPortPair(anyObject())).andReturn(portPair1).anyTimes();
         replay(portPairService);
 
-        final WebResource rs = resource();
-        final String response = rs.path("port_pairs/78dcd363-fc23-aeb6-f44b-56dc5e2fb3ae").get(String.class);
+        final WebTarget wt = target();
+        final String response = wt.path("port_pairs/78dcd363-fc23-aeb6-f44b-56dc5e2fb3ae")
+                .request().get(String.class);
         final JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
     }
@@ -187,13 +187,14 @@
         expect(portPairService.getPortPair(anyObject()))
         .andReturn(null).anyTimes();
         replay(portPairService);
-        WebResource rs = resource();
+        WebTarget wt = target();
         try {
-            rs.path("port_pairs/78dcd363-fc23-aeb6-f44b-56dc5aafb3ae").get(String.class);
+            wt.path("port_pairs/78dcd363-fc23-aeb6-f44b-56dc5aafb3ae")
+                    .request().get(String.class);
             fail("Fetch of non-existent port pair did not throw an exception");
-        } catch (UniformInterfaceException ex) {
+        } catch (NotFoundException ex) {
             assertThat(ex.getMessage(),
-                       containsString("returned a response status of"));
+                       containsString("HTTP 404 Not Found"));
         }
     }
 
@@ -207,12 +208,12 @@
         .andReturn(true).anyTimes();
         replay(portPairService);
 
-        WebResource rs = resource();
+        WebTarget wt = target();
         InputStream jsonStream = PortPairResourceTest.class.getResourceAsStream("post-PortPair.json");
 
-        ClientResponse response = rs.path("port_pairs")
-                .type(MediaType.APPLICATION_JSON_TYPE)
-                .post(ClientResponse.class, jsonStream);
+        Response response = wt.path("port_pairs")
+                .request(MediaType.APPLICATION_JSON_TYPE)
+                .post(Entity.json(jsonStream));
         assertThat(response.getStatus(), is(HttpURLConnection.HTTP_OK));
     }
 
@@ -225,13 +226,13 @@
         .andReturn(true).anyTimes();
         replay(portPairService);
 
-        WebResource rs = resource();
+        WebTarget wt = target();
 
         String location = "port_pairs/78dcd363-fc23-aeb6-f44b-56dc5e2fb3ae";
 
-        ClientResponse deleteResponse = rs.path(location)
-                .type(MediaType.APPLICATION_JSON_TYPE)
-                .delete(ClientResponse.class);
+        Response deleteResponse = wt.path(location)
+                .request(MediaType.APPLICATION_JSON_TYPE)
+                .delete();
         assertThat(deleteResponse.getStatus(),
                    is(HttpURLConnection.HTTP_NO_CONTENT));
     }
