diff --git a/apps/aaa/app.xml b/apps/aaa/app.xml
index e324551..ea6771c 100644
--- a/apps/aaa/app.xml
+++ b/apps/aaa/app.xml
@@ -20,5 +20,4 @@
      features="${project.artifactId}">
     <description>${project.description}</description>
     <artifact>mvn:${project.groupId}/${project.artifactId}/${project.version}</artifact>
-    <bundle>mvn:com.sun.jersey/jersey-client/1.19</bundle>
 </app>
diff --git a/apps/aaa/features.xml b/apps/aaa/features.xml
index 59e95dc..5b08d80 100644
--- a/apps/aaa/features.xml
+++ b/apps/aaa/features.xml
@@ -18,7 +18,6 @@
     <feature name="${project.artifactId}" version="${project.version}"
              description="${project.description}">
         <feature>onos-api</feature>
-        <bundle>mvn:com.sun.jersey/jersey-client/1.19</bundle>
         <bundle>mvn:${project.groupId}/${project.artifactId}/${project.version}</bundle>
     </feature>
 </features>
diff --git a/apps/acl/pom.xml b/apps/acl/pom.xml
index 2f33f72..a074002 100644
--- a/apps/acl/pom.xml
+++ b/apps/acl/pom.xml
@@ -62,8 +62,8 @@
 
         <dependency>
             <groupId>javax.ws.rs</groupId>
-            <artifactId>jsr311-api</artifactId>
-            <version>1.1.1</version>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>2.0.1</version>
         </dependency>
 
         <dependency>
@@ -100,8 +100,14 @@
         </dependency>
 
         <dependency>
-            <groupId>com.sun.jersey.jersey-test-framework</groupId>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
             <artifactId>jersey-test-framework-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
+            <scope>test</scope>
         </dependency>
 
         <dependency>
@@ -110,11 +116,6 @@
         </dependency>
 
         <dependency>
-            <groupId>com.sun.jersey.jersey-test-framework</groupId>
-            <artifactId>jersey-test-framework-grizzly2</artifactId>
-        </dependency>
-
-        <dependency>
             <groupId>org.onosproject</groupId>
             <artifactId>onlab-misc</artifactId>
         </dependency>
@@ -141,9 +142,8 @@
                             org.osgi.framework,
                             javax.ws.rs,javax.ws.rs.core,
                             com.fasterxml.jackson*,
-                            com.sun.jersey.api.core,
-                            com.sun.jersey.spi.container.servlet,
-                            com.sun.jersey.server.impl.container.servlet,
+                            org.glassfish.jersey,
+                            org.glassfish.jersey.servlet,
                             org.onlab.packet.*,
                             org.onlab.rest.*,
                             org.onosproject.*,
diff --git a/apps/acl/src/main/webapp/WEB-INF/web.xml b/apps/acl/src/main/webapp/WEB-INF/web.xml
index bd5de2f..fc8db36 100644
--- a/apps/acl/src/main/webapp/WEB-INF/web.xml
+++ b/apps/acl/src/main/webapp/WEB-INF/web.xml
@@ -45,7 +45,7 @@
 
     <servlet>
         <servlet-name>JAX-RS Service</servlet-name>
-        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
+        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
             <param-name>javax.ws.rs.Application</param-name>
             <param-value>org.onosproject.acl.AclWebApplication</param-value>
diff --git a/apps/acl/src/test/java/org/onosproject/acl/AclWebResourceTest.java b/apps/acl/src/test/java/org/onosproject/acl/AclWebResourceTest.java
index c554db6..34765a4 100644
--- a/apps/acl/src/test/java/org/onosproject/acl/AclWebResourceTest.java
+++ b/apps/acl/src/test/java/org/onosproject/acl/AclWebResourceTest.java
@@ -20,9 +20,8 @@
 
 package org.onosproject.acl;
 
-import com.sun.jersey.api.client.WebResource;
-import com.sun.jersey.test.framework.AppDescriptor;
-import com.sun.jersey.test.framework.WebAppDescriptor;
+import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.test.JerseyTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Ignore;
@@ -31,30 +30,42 @@
 import org.onlab.osgi.TestServiceDirectory;
 import org.onlab.rest.BaseResource;
 import org.onosproject.core.IdGenerator;
-import org.onosproject.rest.ResourceTest;
 
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.WebTarget;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicLong;
 
-import static org.easymock.EasyMock.*;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
 import static org.hamcrest.Matchers.containsString;
 import static org.junit.Assert.assertThat;
 
 /**
  * Test class for ACL application REST resource.
  */
-public class AclWebResourceTest extends ResourceTest {
+public class AclWebResourceTest extends JerseyTest {
 
     final AclService mockAclService = createMock(AclService.class);
     final AclStore mockAclStore = createMock(AclStore.class);
     final List<AclRule> rules = new ArrayList<>();
 
+    /**
+     * Constructs a control metrics collector resource test instance.
+     */
+    public AclWebResourceTest() {
+        super(ResourceConfig.forApplicationClass(AclWebApplication.class));
+    }
+
     @Before
-    public void setUp() {
+    public void setUpMock() {
         expect(mockAclService.getAclRules()).andReturn(rules).anyTimes();
-        ServiceDirectory testDirectory = new TestServiceDirectory().add(AclService.class, mockAclService)
+        ServiceDirectory testDirectory = new TestServiceDirectory()
+                .add(AclService.class, mockAclService)
                 .add(AclStore.class, mockAclStore);
         BaseResource.setServiceDirectory(testDirectory);
 
@@ -79,64 +90,62 @@
         }
     }
 
-    @Override
-    public AppDescriptor configure() {
-        return new WebAppDescriptor.Builder("org.onosproject.acl").build();
-    }
-
     @Test
     @Ignore("FIXME: This needs to get reworked")
     public void addRule() throws IOException {
-        WebResource.Builder rs = resource().path("rules").header("Content-type", "application/json");
+        WebTarget wt = target();
         String response;
         String json;
 
         replay(mockAclService);
 
+        // FIXME: following code snippet requires refactoring by extracting
+        // json string as a separated file
+
         // input a invalid JSON string that contains neither nw_src and nw_dst
         json = "{\"ipProto\":\"TCP\",\"dstTpPort\":\"80\"}";
-        response = rs.post(String.class, json);
+        response = wt.request().post(Entity.json(json), String.class);
         assertThat(response, containsString("Failed! Either srcIp or dstIp must be assigned."));
 
         // input a invalid JSON string that doesn't contain CIDR mask bits
         json = "{\"ipProto\":\"TCP\",\"srcIp\":\"10.0.0.1\",\"dstTpPort\":\"80\",\"action\":\"DENY\"}";
-        response = rs.post(String.class, json);
+        response = wt.request().post(Entity.json(json), String.class);
         assertThat(response, containsString("Malformed IPv4 prefix string: 10.0.0.1. " +
                                                     "Address must take form \"x.x.x.x/y\""));
 
         // input a invalid JSON string that contains a invalid IP address
         json = "{\"ipProto\":\"TCP\",\"srcIp\":\"10.0.0.256/32\",\"dstTpPort\":\"80\",\"action\":\"DENY\"}";
-        response = rs.post(String.class, json);
+        response = wt.request().post(Entity.json(json), String.class);
         assertThat(response, containsString("Invalid IP address string: 10.0.0.256"));
 
         // input a invalid JSON string that contains a invalid IP address
         json = "{\"ipProto\":\"TCP\",\"srcIp\":\"10.0.01/32\",\"dstTpPort\":\"80\",\"action\":\"DENY\"}";
-        response = rs.post(String.class, json);
+        response = wt.request().post(Entity.json(json), String.class);
         assertThat(response, containsString("Invalid IP address string: 10.0.01"));
 
         // input a invalid JSON string that contains a invalid CIDR mask bits
         json = "{\"ipProto\":\"TCP\",\"srcIp\":\"10.0.0.1/a\",\"dstTpPort\":\"80\",\"action\":\"DENY\"}";
-        response = rs.post(String.class, json);
+        response = wt.request().post(Entity.json(json), String.class);
         assertThat(response, containsString("Failed! For input string: \"a\""));
 
         // input a invalid JSON string that contains a invalid CIDR mask bits
         json = "{\"ipProto\":\"TCP\",\"srcIp\":\"10.0.0.1/33\",\"dstTpPort\":\"80\",\"action\":\"DENY\"}";
-        response = rs.post(String.class, json);
+        response = wt.request().post(Entity.json(json), String.class);
         assertThat(response, containsString("Invalid prefix length 33. The value must be in the interval [0, 32]"));
 
         // input a invalid JSON string that contains a invalid ipProto value
         json = "{\"ipProto\":\"ARP\",\"srcIp\":\"10.0.0.1/32\",\"dstTpPort\":\"80\",\"action\":\"DENY\"}";
-        response = rs.post(String.class, json);
+        response = wt.request().post(Entity.json(json), String.class);
         assertThat(response, containsString("ipProto must be assigned to TCP, UDP, or ICMP."));
 
         // input a invalid JSON string that contains a invalid dstTpPort value
         json = "{\"ipProto\":\"TCP\",\"srcIp\":\"10.0.0.1/32\",\"dstTpPort\":\"a\",\"action\":\"DENY\"}";
-        response = rs.post(String.class, json);
+        response = wt.request().post(Entity.json(json), String.class);
         assertThat(response, containsString("dstTpPort must be assigned to a numerical value."));
 
         // input a invalid JSON string that contains a invalid action value
         json = "{\"ipProto\":\"TCP\",\"srcIp\":\"10.0.0.1/32\",\"dstTpPort\":\"80\",\"action\":\"PERMIT\"}";
-        response = rs.post(String.class, json);
+        response = wt.request().post(Entity.json(json), String.class);
         assertThat(response, containsString("action must be assigned to ALLOW or DENY."));
     }
 }
diff --git a/apps/cordfabric/pom.xml b/apps/cordfabric/pom.xml
index aea14f4..2c41ad0 100644
--- a/apps/cordfabric/pom.xml
+++ b/apps/cordfabric/pom.xml
@@ -68,12 +68,12 @@
         </dependency>
         <dependency>
             <groupId>javax.ws.rs</groupId>
-            <artifactId>jsr311-api</artifactId>
-            <version>1.1.1</version>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>2.0.1</version>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey</groupId>
-            <artifactId>jersey-servlet</artifactId>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-servlet</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
@@ -116,9 +116,8 @@
                             org.osgi.framework,
                             javax.ws.rs,
                             javax.ws.rs.core,
-                            com.sun.jersey.api.core,
-                            com.sun.jersey.spi.container.servlet,
-                            com.sun.jersey.server.impl.container.servlet,
+                            org.glassfish.jersey,
+                            org.glassfish.jersey.servlet,
                             com.fasterxml.jackson.databind,
                             com.fasterxml.jackson.databind.node,
                             org.apache.karaf.shell.commands,
diff --git a/apps/cordfabric/src/main/webapp/WEB-INF/web.xml b/apps/cordfabric/src/main/webapp/WEB-INF/web.xml
index 06d3a35..ac7cf84 100644
--- a/apps/cordfabric/src/main/webapp/WEB-INF/web.xml
+++ b/apps/cordfabric/src/main/webapp/WEB-INF/web.xml
@@ -22,13 +22,9 @@
 
     <servlet>
         <servlet-name>JAX-RS Service</servlet-name>
-        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
+        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
-            <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
-            <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig</param-value>
-        </init-param>
-        <init-param>
-            <param-name>com.sun.jersey.config.property.classnames</param-name>
+            <param-name>jersey.config.server.provider.classnames</param-name>
             <param-value>
                 org.onosproject.cordfabric.FabricWebResource
             </param-value>
diff --git a/apps/cordmcast/pom.xml b/apps/cordmcast/pom.xml
index 1dd4cdb..1802a7d 100644
--- a/apps/cordmcast/pom.xml
+++ b/apps/cordmcast/pom.xml
@@ -67,9 +67,9 @@
             <version>5.0.0</version>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey</groupId>
+            <groupId>org.glassfish.jersey.core</groupId>
             <artifactId>jersey-client</artifactId>
-            <version>1.19</version>
+            <version>2.22.2</version>
         </dependency>
         <dependency>
             <groupId>org.onosproject</groupId>
diff --git a/apps/cordmcast/src/main/java/org/onosproject/cordmcast/CordMcast.java b/apps/cordmcast/src/main/java/org/onosproject/cordmcast/CordMcast.java
index 6611414..96a7c99 100644
--- a/apps/cordmcast/src/main/java/org/onosproject/cordmcast/CordMcast.java
+++ b/apps/cordmcast/src/main/java/org/onosproject/cordmcast/CordMcast.java
@@ -20,10 +20,6 @@
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
-import com.sun.jersey.api.client.Client;
-import com.sun.jersey.api.client.ClientHandlerException;
-import com.sun.jersey.api.client.WebResource;
-import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
@@ -32,6 +28,9 @@
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.glassfish.jersey.client.ClientConfig;
+import org.glassfish.jersey.client.ClientProperties;
+import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
 import org.onlab.packet.Ethernet;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.VlanId;
@@ -69,6 +68,12 @@
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
 
+import javax.ws.rs.ProcessingException;
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.Invocation;
+import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.MediaType;
 import java.io.IOException;
 import java.util.Dictionary;
@@ -200,7 +205,7 @@
                 .map(r -> new ImmutablePair<>(r, mcastService.fetchSinks(r)))
                 .filter(pair -> pair.getRight() != null && !pair.getRight().isEmpty())
                 .forEach(pair -> pair.getRight().forEach(sink -> provisionGroup(pair.getLeft(),
-                                                                                sink)));
+                        sink)));
 
         log.info("Started");
     }
@@ -305,8 +310,8 @@
                     public void onError(Objective objective, ObjectiveError error) {
                         //TODO: change to debug
                         log.info("Next Objective {} failed, because {}",
-                                 objective.id(),
-                                 error);
+                                objective.id(),
+                                error);
                     }
                 });
 
@@ -345,8 +350,8 @@
                         public void onError(Objective objective, ObjectiveError error) {
                             //TODO: change to debug
                             log.info("Next Objective {} failed, because {}",
-                                     objective.id(),
-                                     error);
+                                    objective.id(),
+                                    error);
                         }
                     });
 
@@ -406,8 +411,8 @@
                         public void onError(Objective objective, ObjectiveError error) {
                             //TODO: change to debug
                             log.info("Next Objective {} failed, because {}",
-                                     objective.id(),
-                                     error);
+                                    objective.id(),
+                                    error);
                         }
                     });
 
@@ -427,14 +432,14 @@
 
         log.debug("Sending route {} to other ONOS {}", route, fabricOnosUrl);
 
-        WebResource.Builder builder = getClientBuilder(fabricOnosUrl);
+        Invocation.Builder builder = getClientBuilder(fabricOnosUrl);
 
         ObjectNode json = codecService.getCodec(McastRoute.class)
                 .encode(route, new AbstractWebResource());
 
         try {
-            builder.post(json.toString());
-        } catch (ClientHandlerException e) {
+            builder.post(Entity.json(json.toString()));
+        } catch (ProcessingException e) {
             log.warn("Unable to send route to remote controller: {}", e.getMessage());
         }
     }
@@ -447,15 +452,14 @@
 
         log.debug("Removing route {} from other ONOS {}", route, fabricOnosUrl);
 
-        WebResource.Builder builder = getClientBuilder(fabricOnosUrl);
+        Invocation.Builder builder = getClientBuilder(fabricOnosUrl)
+                .property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true);
 
         ObjectNode json = codecService.getCodec(McastRoute.class)
                 .encode(route, new AbstractWebResource());
-        try {
-            builder.delete(json.toString());
-        } catch (ClientHandlerException e) {
-            log.warn("Unable to delete route from remote controller: {}", e.getMessage());
-        }
+
+        builder.method("DELETE", Entity.entity(json.asText(),
+                MediaType.APPLICATION_OCTET_STREAM));
     }
 
     private void clearRemoteRoutes() {
@@ -466,7 +470,7 @@
 
         log.debug("Clearing remote multicast routes from {}", fabricOnosUrl);
 
-        WebResource.Builder builder = getClientBuilder(fabricOnosUrl);
+        Invocation.Builder builder = getClientBuilder(fabricOnosUrl);
         List<McastRoute> mcastRoutes = Lists.newArrayList();
 
         try {
@@ -484,8 +488,6 @@
             list.forEach(n -> mcastRoutes.add(
                     routeCodec.decode((ObjectNode) n, new AbstractWebResource())));
 
-        } catch (ClientHandlerException e) {
-            log.warn("Unable to clear routes from remote controller: {}", e.getMessage());
         } catch (IOException e) {
             log.warn("Error clearing remote routes", e);
         }
@@ -493,14 +495,16 @@
         mcastRoutes.forEach(this::removeRemoteRoute);
     }
 
-    private WebResource.Builder getClientBuilder(String uri) {
-        Client client = Client.create();
-        client.setConnectTimeout(DEFAULT_REST_TIMEOUT_MS);
-        client.setReadTimeout(DEFAULT_REST_TIMEOUT_MS);
-        client.addFilter(new HTTPBasicAuthFilter(user, password));
-        WebResource resource = client.resource(uri);
-        return resource.accept(JSON_UTF_8.toString())
-                .type(JSON_UTF_8.toString());
+    private Invocation.Builder getClientBuilder(String uri) {
+        ClientConfig config = new ClientConfig();
+        Client client = ClientBuilder.newClient(config);
+
+        client.property(ClientProperties.CONNECT_TIMEOUT, DEFAULT_REST_TIMEOUT_MS);
+        client.property(ClientProperties.READ_TIMEOUT,    DEFAULT_REST_TIMEOUT_MS);
+        client.register(HttpAuthenticationFeature.basic(user, password));
+
+        WebTarget wt = client.target(uri);
+        return wt.request(JSON_UTF_8.toString());
     }
 
     private class InternalNetworkConfigListener implements NetworkConfigListener {
@@ -532,8 +536,5 @@
         public boolean isRelevant(NetworkConfigEvent event) {
             return event.configClass().equals(CONFIG_CLASS);
         }
-
-
     }
-
 }
diff --git a/apps/cordvtn/pom.xml b/apps/cordvtn/pom.xml
index 16d74b3..d43360d 100644
--- a/apps/cordvtn/pom.xml
+++ b/apps/cordvtn/pom.xml
@@ -82,12 +82,12 @@
         </dependency>
         <dependency>
             <groupId>javax.ws.rs</groupId>
-            <artifactId>jsr311-api</artifactId>
-            <version>1.1.1</version>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>2.0.1</version>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey</groupId>
-            <artifactId>jersey-servlet</artifactId>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-servlet</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
@@ -135,9 +135,8 @@
                             org.osgi.framework,
                             javax.ws.rs,
                             javax.ws.rs.core,
-                            com.sun.jersey.api.core,
-                            com.sun.jersey.spi.container.servlet,
-                            com.sun.jersey.server.impl.container.servlet,
+                            org.glassfish.jersey,
+                            org.glassfish.jersey.servlet,
                             com.fasterxml.jackson.databind,
                             com.fasterxml.jackson.databind.node,
                             com.fasterxml.jackson.core,
diff --git a/apps/cordvtn/src/main/webapp/WEB-INF/web.xml b/apps/cordvtn/src/main/webapp/WEB-INF/web.xml
index b482a22..37d2bbd 100644
--- a/apps/cordvtn/src/main/webapp/WEB-INF/web.xml
+++ b/apps/cordvtn/src/main/webapp/WEB-INF/web.xml
@@ -42,7 +42,7 @@
 
     <servlet>
         <servlet-name>JAX-RS Service</servlet-name>
-        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
+        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
             <param-name>javax.ws.rs.Application</param-name>
             <param-value>org.onosproject.cordvtn.rest.CordVtnWebApplication</param-value>
diff --git a/apps/cpman/app/pom.xml b/apps/cpman/app/pom.xml
index 3b52a9b..81109c0 100644
--- a/apps/cpman/app/pom.xml
+++ b/apps/cpman/app/pom.xml
@@ -106,8 +106,8 @@
         </dependency>
         <dependency>
             <groupId>javax.ws.rs</groupId>
-            <artifactId>jsr311-api</artifactId>
-            <version>1.1.1</version>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>2.0.1</version>
         </dependency>
         <dependency>
             <groupId>org.rrd4j</groupId>
@@ -116,10 +116,6 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey</groupId>
-            <artifactId>jersey-servlet</artifactId>
-        </dependency>
-        <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
         </dependency>
@@ -128,23 +124,27 @@
             <artifactId>jackson-annotations</artifactId>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey</groupId>
+            <groupId>org.glassfish.jersey.core</groupId>
             <artifactId>jersey-client</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-servlet</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.easymock</groupId>
             <artifactId>easymock</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey.jersey-test-framework</groupId>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
             <artifactId>jersey-test-framework-core</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey.jersey-test-framework</groupId>
-            <artifactId>jersey-test-framework-grizzly2</artifactId>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -177,9 +177,8 @@
                             org.osgi.framework,
                             javax.ws.rs,
                             javax.ws.rs.core,
-                            com.sun.jersey.api.core,
-                            com.sun.jersey.spi.container.servlet,
-                            com.sun.jersey.server.impl.container.servlet,
+                            org.glassfish.jersey,
+                            org.glassfish.jersey.servlet,
                             com.fasterxml.jackson.databind,
                             com.fasterxml.jackson.databind.node,
                             com.fasterxml.jackson.core,
diff --git a/apps/cpman/app/src/main/java/org/onosproject/cpman/rest/ControlMetricsCollectorWebResource.java b/apps/cpman/app/src/main/java/org/onosproject/cpman/rest/ControlMetricsCollectorWebResource.java
index 777b89f..07412861 100644
--- a/apps/cpman/app/src/main/java/org/onosproject/cpman/rest/ControlMetricsCollectorWebResource.java
+++ b/apps/cpman/app/src/main/java/org/onosproject/cpman/rest/ControlMetricsCollectorWebResource.java
@@ -271,4 +271,4 @@
         }
         return ok(root).build();
     }
-}
\ No newline at end of file
+}
diff --git a/apps/cpman/app/src/main/webapp/WEB-INF/web.xml b/apps/cpman/app/src/main/webapp/WEB-INF/web.xml
index a1be00b..f42d8d3 100644
--- a/apps/cpman/app/src/main/webapp/WEB-INF/web.xml
+++ b/apps/cpman/app/src/main/webapp/WEB-INF/web.xml
@@ -42,7 +42,7 @@
 
     <servlet>
         <servlet-name>JAX-RS Service</servlet-name>
-        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
+        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
             <param-name>javax.ws.rs.Application</param-name>
             <param-value>org.onosproject.cpman.rest.CPManWebApplication</param-value>
diff --git a/apps/cpman/app/src/test/java/org/onosproject/cpman/rest/ControlMetricsCollectorResourceTest.java b/apps/cpman/app/src/test/java/org/onosproject/cpman/rest/ControlMetricsCollectorResourceTest.java
index ac84e1d..42c73cc 100644
--- a/apps/cpman/app/src/test/java/org/onosproject/cpman/rest/ControlMetricsCollectorResourceTest.java
+++ b/apps/cpman/app/src/test/java/org/onosproject/cpman/rest/ControlMetricsCollectorResourceTest.java
@@ -15,12 +15,8 @@
  */
 package org.onosproject.cpman.rest;
 
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.WebResource;
-import com.sun.jersey.spi.container.servlet.ServletContainer;
-import com.sun.jersey.test.framework.AppDescriptor;
-import com.sun.jersey.test.framework.JerseyTest;
-import com.sun.jersey.test.framework.WebAppDescriptor;
+import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.test.JerseyTest;
 import org.junit.Before;
 import org.junit.Test;
 import org.onlab.osgi.ServiceDirectory;
@@ -31,11 +27,12 @@
 import org.onosproject.cpman.impl.SystemInfoFactory;
 import org.onosproject.net.DeviceId;
 
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.MediaType;
-import java.io.IOException;
+import javax.ws.rs.core.Response;
 import java.io.InputStream;
 import java.net.HttpURLConnection;
-import java.net.ServerSocket;
 import java.util.Optional;
 
 import static org.easymock.EasyMock.anyInt;
@@ -62,9 +59,7 @@
      * Constructs a control metrics collector resource test instance.
      */
     public ControlMetricsCollectorResourceTest() {
-        super(new WebAppDescriptor.Builder("javax.ws.rs.Application",
-                CPManWebApplication.class.getCanonicalName())
-                .servletClass(ServletContainer.class).build());
+        super(ResourceConfig.forApplicationClass(CPManWebApplication.class));
     }
 
     /**
@@ -135,44 +130,20 @@
         assertThat(si.totalMemory(), is(4096));
     }
 
-    private ClientResponse baseTest(String jsonFile, String path) {
-        final WebResource rs = resource();
+    private Response baseTest(String jsonFile, String path) {
+        final WebTarget wt = target();
         InputStream jsonStream = ControlMetricsCollectorResourceTest.class
                 .getResourceAsStream(jsonFile);
 
         assertThat(jsonStream, notNullValue());
 
-        return rs.path(path)
-                .type(MediaType.APPLICATION_JSON_TYPE)
-                .post(ClientResponse.class, jsonStream);
+        return wt.path(path)
+                .request(MediaType.APPLICATION_JSON_TYPE)
+                .post(Entity.json(jsonStream));
     }
 
     private void basePostTest(String jsonFile, String path) {
-        ClientResponse response = baseTest(jsonFile, path);
+        Response response = baseTest(jsonFile, path);
         assertThat(response.getStatus(), is(HttpURLConnection.HTTP_OK));
     }
-
-    /**
-     * Assigns an available port for the test.
-     *
-     * @param defaultPort If a port cannot be determined, this one is used.
-     * @return free port
-     */
-    @Override
-    public int getPort(int defaultPort) {
-        try {
-            ServerSocket socket = new ServerSocket(0);
-            socket.setReuseAddress(true);
-            int port = socket.getLocalPort();
-            socket.close();
-            return port;
-        } catch (IOException ioe) {
-            return defaultPort;
-        }
-    }
-
-    @Override
-    public AppDescriptor configure() {
-        return new WebAppDescriptor.Builder("org.onosproject.cpman.rest").build();
-    }
 }
diff --git a/apps/demo/cord-gui/pom.xml b/apps/demo/cord-gui/pom.xml
index 6512d60..78b71c8 100644
--- a/apps/demo/cord-gui/pom.xml
+++ b/apps/demo/cord-gui/pom.xml
@@ -44,14 +44,14 @@
         </dependency>
 
         <dependency>
-            <groupId>com.sun.jersey</groupId>
-            <artifactId>jersey-servlet</artifactId>
-            <version>1.19</version>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-servlet</artifactId>
+            <version>2.22.2</version>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey</groupId>
+            <groupId>org.glassfish.jersey.core</groupId>
             <artifactId>jersey-client</artifactId>
-            <version>1.19</version>
+            <version>2.22.2</version>
         </dependency>
 
         <dependency>
diff --git a/apps/demo/cord-gui/src/main/webapp/WEB-INF/web.xml b/apps/demo/cord-gui/src/main/webapp/WEB-INF/web.xml
index 0ee2555..3628d39 100644
--- a/apps/demo/cord-gui/src/main/webapp/WEB-INF/web.xml
+++ b/apps/demo/cord-gui/src/main/webapp/WEB-INF/web.xml
@@ -22,13 +22,9 @@
 
     <servlet>
         <servlet-name>JAX-RS Service</servlet-name>
-        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
+        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
-            <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
-            <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig</param-value>
-        </init-param>
-        <init-param>
-            <param-name>com.sun.jersey.config.property.classnames</param-name>
+            <param-name>jersey.config.server.provider.classnames</param-name>
             <param-value>
                 org.onosproject.cord.gui.CordWebResource
             </param-value>
diff --git a/apps/dhcp/app/pom.xml b/apps/dhcp/app/pom.xml
index f38f1b5..1f22e28 100644
--- a/apps/dhcp/app/pom.xml
+++ b/apps/dhcp/app/pom.xml
@@ -101,12 +101,12 @@
         </dependency>
         <dependency>
             <groupId>javax.ws.rs</groupId>
-            <artifactId>jsr311-api</artifactId>
-            <version>1.1.1</version>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>2.0.1</version>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey</groupId>
-            <artifactId>jersey-servlet</artifactId>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-servlet</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
@@ -140,9 +140,8 @@
                             org.osgi.framework,
                             javax.ws.rs,
                             javax.ws.rs.core,
-                            com.sun.jersey.api.core,
-                            com.sun.jersey.spi.container.servlet,
-                            com.sun.jersey.server.impl.container.servlet,
+                            org.glassfish.jersey,
+                            org.glassfish.jersey.servlet,
                             com.fasterxml.jackson.databind,
                             com.fasterxml.jackson.databind.node,
                             com.fasterxml.jackson.core,
diff --git a/apps/dhcp/app/src/main/webapp/WEB-INF/web.xml b/apps/dhcp/app/src/main/webapp/WEB-INF/web.xml
index 974ac99..bc9c014 100644
--- a/apps/dhcp/app/src/main/webapp/WEB-INF/web.xml
+++ b/apps/dhcp/app/src/main/webapp/WEB-INF/web.xml
@@ -42,7 +42,7 @@
 
     <servlet>
         <servlet-name>JAX-RS Service</servlet-name>
-        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
+        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
             <param-name>javax.ws.rs.Application</param-name>
             <param-value>org.onosproject.dhcp.rest.DhcpWebApplication</param-value>
diff --git a/apps/faultmanagement/fmmgr/pom.xml b/apps/faultmanagement/fmmgr/pom.xml
index 44616bd..e2e6b65 100644
--- a/apps/faultmanagement/fmmgr/pom.xml
+++ b/apps/faultmanagement/fmmgr/pom.xml
@@ -32,8 +32,8 @@
     <dependencies>
         <dependency>
             <groupId>javax.ws.rs</groupId>
-            <artifactId>jsr311-api</artifactId>
-            <version>1.1.1</version>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>2.0.1</version>
         </dependency>
         <dependency>
             <groupId>org.onosproject</groupId>
diff --git a/apps/faultmanagement/fmweb/pom.xml b/apps/faultmanagement/fmweb/pom.xml
index 312eef5..9b65196 100644
--- a/apps/faultmanagement/fmweb/pom.xml
+++ b/apps/faultmanagement/fmweb/pom.xml
@@ -42,8 +42,8 @@
     <dependencies>
         <dependency>
             <groupId>javax.ws.rs</groupId>
-            <artifactId>jsr311-api</artifactId>
-            <version>1.1.1</version>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>2.0.1</version>
         </dependency>
         <dependency>
             <groupId>org.onosproject</groupId>
@@ -59,10 +59,9 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey</groupId>
+            <groupId>org.glassfish.jersey.core</groupId>
             <artifactId>jersey-client</artifactId>
-            <version>1.19</version>
-            <scope>test</scope>
+            <version>2.22.2</version>
             <type>jar</type>
         </dependency>
         <dependency>
@@ -89,9 +88,9 @@
         </dependency>
 
         <dependency>
-            <groupId>com.sun.jersey.jersey-test-framework</groupId>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
             <artifactId>jersey-test-framework-core</artifactId>
-            <version>1.19</version>
+            <scope>test</scope>
         </dependency>
 
     </dependencies>
@@ -116,9 +115,8 @@
                             org.osgi.framework,
                             javax.ws.rs,
                             javax.ws.rs.core,
-                            com.sun.jersey.api.core,
-                            com.sun.jersey.spi.container.servlet,
-                            com.sun.jersey.server.impl.container.servlet,
+                            org.glassfish.jersey,
+                            org.glassfish.jersey.servlet,
                             com.fasterxml.jackson.databind,
                             com.fasterxml.jackson.databind.node,
                             com.fasterxml.jackson.core,
diff --git a/apps/faultmanagement/fmweb/src/main/webapp/WEB-INF/web.xml b/apps/faultmanagement/fmweb/src/main/webapp/WEB-INF/web.xml
index 18671f0..bff55e6 100644
--- a/apps/faultmanagement/fmweb/src/main/webapp/WEB-INF/web.xml
+++ b/apps/faultmanagement/fmweb/src/main/webapp/WEB-INF/web.xml
@@ -22,13 +22,9 @@
 
     <servlet>
         <servlet-name>JAX-RS Service</servlet-name>
-        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
+        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
-            <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
-            <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig</param-value>
-        </init-param>
-        <init-param>
-            <param-name>com.sun.jersey.config.property.classnames</param-name>
+            <param-name>jersey.config.server.provider.classnames</param-name>
             <param-value>
                 org.onosproject.faultmanagement.web.AlarmsWebResource</param-value>
         </init-param>
diff --git a/apps/faultmanagement/fmweb/src/test/java/org/onosproject/faultmanagement/web/AlarmsWebResourceTest.java b/apps/faultmanagement/fmweb/src/test/java/org/onosproject/faultmanagement/web/AlarmsWebResourceTest.java
index 027a548..76eaf61 100644
--- a/apps/faultmanagement/fmweb/src/test/java/org/onosproject/faultmanagement/web/AlarmsWebResourceTest.java
+++ b/apps/faultmanagement/fmweb/src/test/java/org/onosproject/faultmanagement/web/AlarmsWebResourceTest.java
@@ -15,14 +15,9 @@
  */
 package org.onosproject.faultmanagement.web;
 
-import com.sun.jersey.api.client.WebResource;
 import org.junit.Before;
-import org.junit.Test;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.containsString;
-import static org.hamcrest.Matchers.not;
 import org.junit.Ignore;
+import org.junit.Test;
 import org.onlab.osgi.ServiceDirectory;
 import org.onlab.osgi.TestServiceDirectory;
 import org.onlab.rest.BaseResource;
@@ -30,13 +25,21 @@
 import org.onosproject.codec.impl.CodecManager;
 import org.onosproject.rest.ResourceTest;
 
+import javax.ws.rs.client.WebTarget;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.not;
+
 /**
  * Test of the Fault Management Web REST API for Alarms.
  */
 public class AlarmsWebResourceTest extends ResourceTest {
 
+
+
     @Before
-    public void setUp() {
+    public void setUpMock() {
 
         CodecManager codecService = new CodecManager();
         codecService.activate();
@@ -51,8 +54,8 @@
     @Test
     @Ignore
     public void getAllAlarms() {
-        WebResource rs = resource();
-        String response = rs.path("/alarms").get(String.class);
+        WebTarget wt = target();
+        String response = wt.path("/alarms").request().get(String.class);
         // Ensure hard-coded alarms returned okay
         assertThat(response, containsString("\"NE is not reachable\","));
         assertThat(response, containsString("\"Equipment Missing\","));
@@ -61,8 +64,8 @@
     @Test
     @Ignore
     public void getAlarm() {
-        WebResource rs = resource();
-        String response = rs.path("/alarms/1").get(String.class);
+        WebTarget wt = target();
+        String response = wt.path("/alarms/1").request().get(String.class);
         // Ensure hard-coded alarms returned okay
         assertThat(response, containsString("\"NE is not reachable\","));
         assertThat(response, not(containsString("\"Equipment Missing\",")));
diff --git a/apps/mfwd/pom.xml b/apps/mfwd/pom.xml
index a3b1ff5..9e67eb7 100644
--- a/apps/mfwd/pom.xml
+++ b/apps/mfwd/pom.xml
@@ -77,8 +77,8 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey</groupId>
-            <artifactId>jersey-servlet</artifactId>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-servlet</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
@@ -120,9 +120,8 @@
                             org.slf4j,
                             org.osgi.framework,
                             javax.ws.rs,javax.ws.rs.core,
-                            com.sun.jersey.api.core,
-                            com.sun.jersey.spi.container.servlet,
-                            com.sun.jersey.server.impl.container.servlet,
+                            org.glassfish.jersey,
+                            org.glassfish.jersey.servlet,
                             com.fasterxml.jackson.databind,
                             com.fasterxml.jackson.databind.node,
                             org.apache.karaf.shell.commands,
diff --git a/apps/mfwd/src/main/webapp/WEB-INF/web.xml b/apps/mfwd/src/main/webapp/WEB-INF/web.xml
index c4c4f45..ba94bae 100644
--- a/apps/mfwd/src/main/webapp/WEB-INF/web.xml
+++ b/apps/mfwd/src/main/webapp/WEB-INF/web.xml
@@ -22,13 +22,9 @@
 
     <servlet>
         <servlet-name>JAX-RS Service</servlet-name>
-        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
+        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
-            <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
-            <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig</param-value>
-        </init-param>
-        <init-param>
-            <param-name>com.sun.jersey.config.property.classnames</param-name>
+            <param-name>jersey.config.server.provider.classnames</param-name>
             <param-value>
                 org.onosproject.mfwd.rest.McastResource
             </param-value>
diff --git a/apps/olt/app/pom.xml b/apps/olt/app/pom.xml
index 18bc347..da16e9e 100644
--- a/apps/olt/app/pom.xml
+++ b/apps/olt/app/pom.xml
@@ -69,12 +69,12 @@
         </dependency>
         <dependency>
             <groupId>javax.ws.rs</groupId>
-            <artifactId>jsr311-api</artifactId>
-            <version>1.1.1</version>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>2.0.1</version>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey</groupId>
-            <artifactId>jersey-servlet</artifactId>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-servlet</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
@@ -118,9 +118,8 @@
                             org.osgi.service.*,
                             javax.ws.rs,
                             javax.ws.rs.core,
-                            com.sun.jersey.api.core,
-                            com.sun.jersey.spi.container.servlet,
-                            com.sun.jersey.server.impl.container.servlet,
+                            org.glassfish.jersey,
+                            org.glassfish.jersey.servlet,
                             com.fasterxml.jackson.databind,
                             com.fasterxml.jackson.databind.node,
                             org.apache.karaf.shell.commands,
diff --git a/apps/olt/app/src/main/webapp/WEB-INF/web.xml b/apps/olt/app/src/main/webapp/WEB-INF/web.xml
index 76276ca..dbcaf21 100644
--- a/apps/olt/app/src/main/webapp/WEB-INF/web.xml
+++ b/apps/olt/app/src/main/webapp/WEB-INF/web.xml
@@ -22,13 +22,9 @@
 
     <servlet>
         <servlet-name>JAX-RS Service</servlet-name>
-        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
+        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
-            <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
-            <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig</param-value>
-        </init-param>
-        <init-param>
-            <param-name>com.sun.jersey.config.property.classnames</param-name>
+            <param-name>jersey.config.server.provider.classnames</param-name>
             <param-value>
                 org.onosproject.olt.rest.OltWebResource
             </param-value>
diff --git a/apps/openstackinterface/app/pom.xml b/apps/openstackinterface/app/pom.xml
index 2d51a44..fdc2a1e 100644
--- a/apps/openstackinterface/app/pom.xml
+++ b/apps/openstackinterface/app/pom.xml
@@ -52,8 +52,8 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey</groupId>
-            <artifactId>jersey-servlet</artifactId>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-servlet</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
@@ -77,14 +77,8 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey</groupId>
+            <groupId>org.glassfish.jersey.core</groupId>
             <artifactId>jersey-client</artifactId>
-            <version>1.19</version>
-        </dependency>
-        <dependency>
-            <groupId>com.sun.jersey</groupId>
-            <artifactId>jersey-core</artifactId>
-            <version>1.19</version>
         </dependency>
         <dependency>
             <groupId>org.onosproject</groupId>
diff --git a/apps/openstackinterface/app/src/main/java/org/onosproject/openstackinterface/impl/OpenstackInterfaceManager.java b/apps/openstackinterface/app/src/main/java/org/onosproject/openstackinterface/impl/OpenstackInterfaceManager.java
index 3fccce3..e9bd9df 100644
--- a/apps/openstackinterface/app/src/main/java/org/onosproject/openstackinterface/impl/OpenstackInterfaceManager.java
+++ b/apps/openstackinterface/app/src/main/java/org/onosproject/openstackinterface/impl/OpenstackInterfaceManager.java
@@ -20,8 +20,6 @@
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Lists;
-import com.sun.jersey.api.client.Client;
-import com.sun.jersey.api.client.WebResource;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -48,6 +46,12 @@
 import org.onosproject.openstackinterface.web.OpenstackSecurityGroupCodec;
 import org.onosproject.openstackinterface.web.OpenstackSubnetCodec;
 import org.slf4j.Logger;
+
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.Invocation;
+import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.MediaType;
 import java.io.IOException;
 import java.util.Collection;
@@ -146,7 +150,7 @@
      */
     public Collection<OpenstackNetwork> getNetworks() {
 
-        WebResource.Builder builder = getClientBuilder(neutronUrl + URI_NETWORKS);
+        Invocation.Builder builder = getClientBuilder(neutronUrl + URI_NETWORKS);
         String response = builder.accept(MediaType.APPLICATION_JSON_TYPE).
                 header(HEADER_AUTH_TOKEN, getToken()).get(String.class);
 
@@ -176,7 +180,7 @@
      */
     public Collection<OpenstackPort> getPorts() {
 
-        WebResource.Builder builder = getClientBuilder(neutronUrl + URI_PORTS);
+        Invocation.Builder builder = getClientBuilder(neutronUrl + URI_PORTS);
         String response = builder.accept(MediaType.APPLICATION_JSON_TYPE).
                 header(HEADER_AUTH_TOKEN, getToken()).get(String.class);
 
@@ -198,7 +202,7 @@
     }
 
     public Collection<OpenstackRouter> getRouters() {
-        WebResource.Builder builder = getClientBuilder(neutronUrl + PATH_ROUTERS);
+        Invocation.Builder builder = getClientBuilder(neutronUrl + PATH_ROUTERS);
         String response = builder.accept(MediaType.APPLICATION_JSON_TYPE).
                 header(HEADER_AUTH_TOKEN, getToken()).get(String.class);
 
@@ -227,8 +231,7 @@
      * @return List of OpenstackSubnet
      */
     public Collection<OpenstackSubnet> getSubnets() {
-
-        WebResource.Builder builder = getClientBuilder(neutronUrl + URI_SUBNETS);
+        Invocation.Builder builder = getClientBuilder(neutronUrl + URI_SUBNETS);
         String response = builder.accept(MediaType.APPLICATION_JSON_TYPE).
                 header(HEADER_AUTH_TOKEN, getToken()).get(String.class);
 
@@ -256,7 +259,7 @@
      * @return OpenstackSecurityGroup object or null if fails
      */
     public OpenstackSecurityGroup getSecurityGroup(String id) {
-        WebResource.Builder builder = getClientBuilder(neutronUrl + URI_SECURITY_GROUPS + "/" + id);
+        Invocation.Builder builder = getClientBuilder(neutronUrl + URI_SECURITY_GROUPS + "/" + id);
         String response = builder.accept(MediaType.APPLICATION_JSON_TYPE).
                 header(HEADER_AUTH_TOKEN, getToken()).get(String.class);
 
@@ -273,11 +276,10 @@
         return securityGroup;
     }
 
-    private WebResource.Builder getClientBuilder(String uri) {
-        Client client = Client.create();
-        WebResource resource = client.resource(uri);
-        return resource.accept(JSON_UTF_8.toString())
-                .type(JSON_UTF_8.toString());
+    private Invocation.Builder getClientBuilder(String uri) {
+        Client client = ClientBuilder.newClient();
+        WebTarget wt = client.target(uri);
+        return wt.request(JSON_UTF_8.toString());
     }
 
     private String getToken() {
@@ -285,8 +287,8 @@
             String request = "{\"auth\": {\"tenantName\": \"admin\", " +
                     "\"passwordCredentials\":  {\"username\": \"" +
                     userName + "\",\"password\": \"" + pass + "\"}}}";
-            WebResource.Builder builder = getClientBuilder(keystoneUrl + URI_TOKENS);
-            String response = builder.accept(MediaType.APPLICATION_JSON).post(String.class, request);
+            Invocation.Builder builder = getClientBuilder(keystoneUrl + URI_TOKENS);
+            String response = builder.accept(MediaType.APPLICATION_JSON).post(Entity.json(request), String.class);
 
             ObjectMapper mapper = new ObjectMapper();
             try {
@@ -413,4 +415,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/apps/openstacknetworking/app/features.xml b/apps/openstacknetworking/app/features.xml
index 3f54d11..f7b5870 100644
--- a/apps/openstacknetworking/app/features.xml
+++ b/apps/openstacknetworking/app/features.xml
@@ -20,6 +20,5 @@
         <feature>onos-api</feature>
         <bundle>mvn:${project.groupId}/onos-app-openstacknetworking-api/${project.version}</bundle>
         <bundle>mvn:${project.groupId}/onos-app-openstacknetworking-web/${project.version}</bundle>
-        <bundle>mvn:com.sun.jersey/jersey-client/1.19</bundle>
     </feature>
 </features>
diff --git a/apps/openstacknetworking/web/features.xml b/apps/openstacknetworking/web/features.xml
index 5aa4f15..cf5c20e 100644
--- a/apps/openstacknetworking/web/features.xml
+++ b/apps/openstacknetworking/web/features.xml
@@ -20,6 +20,5 @@
         <feature>onos-api</feature>
         <bundle>mvn:${project.groupId}/onos-app-openstacknetworking-api/${project.version}</bundle>
         <bundle>mvn:${project.groupId}/onos-app-openstacknetworking-web/${project.version}</bundle>
-        <bundle>mvn:com.sun.jersey/jersey-client/1.19</bundle>
     </feature>
 </features>
diff --git a/apps/openstacknetworking/web/pom.xml b/apps/openstacknetworking/web/pom.xml
index 110f8c7..fd2f282 100644
--- a/apps/openstacknetworking/web/pom.xml
+++ b/apps/openstacknetworking/web/pom.xml
@@ -67,12 +67,12 @@
         </dependency>
         <dependency>
             <groupId>javax.ws.rs</groupId>
-            <artifactId>jsr311-api</artifactId>
-            <version>1.1.1</version>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>2.0.1</version>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey</groupId>
-            <artifactId>jersey-servlet</artifactId>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-servlet</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
@@ -96,14 +96,14 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey</groupId>
+            <groupId>org.glassfish.jersey.core</groupId>
             <artifactId>jersey-client</artifactId>
-            <version>1.19</version>
+            <version>2.22.2</version>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey</groupId>
-            <artifactId>jersey-core</artifactId>
-            <version>1.19</version>
+            <groupId>org.glassfish.jersey.core</groupId>
+            <artifactId>jersey-common</artifactId>
+            <version>2.22.2</version>
         </dependency>
         <dependency>
             <groupId>org.onosproject</groupId>
@@ -129,10 +129,8 @@
                             org.osgi.framework,
                             javax.ws.rs,
                             javax.ws.rs.core,
-                            com.sun.jersey.api.core,
-                            com.sun.jersey.api.client,
-                            com.sun.jersey.spi.container.servlet,
-                            com.sun.jersey.server.impl.container.servlet,
+                            org.glassfish.jersey,
+                            org.glassfish.jersey.servlet,
                             com.fasterxml.jackson.databind,
                             com.fasterxml.jackson.databind.node,
                             com.fasterxml.jackson.core,
diff --git a/apps/openstacknetworking/web/src/main/webapp/WEB-INF/web.xml b/apps/openstacknetworking/web/src/main/webapp/WEB-INF/web.xml
index f475def..f495418 100644
--- a/apps/openstacknetworking/web/src/main/webapp/WEB-INF/web.xml
+++ b/apps/openstacknetworking/web/src/main/webapp/WEB-INF/web.xml
@@ -22,13 +22,9 @@
 
     <servlet>
         <servlet-name>JAX-RS Service</servlet-name>
-        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
+        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
-            <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
-            <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig</param-value>
-        </init-param>
-        <init-param>
-            <param-name>com.sun.jersey.config.property.classnames</param-name>
+            <param-name>jersey.config.server.provider.classnames</param-name>
             <param-value>
                 org.onosproject.openstacknetworking.web.OpenstackPortWebResource,
                 org.onosproject.openstacknetworking.web.OpenstackNetworkWebResource,
diff --git a/apps/segmentrouting/pom.xml b/apps/segmentrouting/pom.xml
index 6aad0d6..4053fe3 100644
--- a/apps/segmentrouting/pom.xml
+++ b/apps/segmentrouting/pom.xml
@@ -68,12 +68,12 @@
         </dependency>
         <dependency>
             <groupId>javax.ws.rs</groupId>
-            <artifactId>jsr311-api</artifactId>
-            <version>1.1.1</version>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>2.0.1</version>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey</groupId>
-            <artifactId>jersey-servlet</artifactId>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-servlet</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
@@ -129,9 +129,8 @@
                             org.osgi.framework,
                             javax.ws.rs,
                             javax.ws.rs.core,
-                            com.sun.jersey.api.core,
-                            com.sun.jersey.spi.container.servlet,
-                            com.sun.jersey.server.impl.container.servlet,
+                            org.glassfish.jersey,
+                            org.glassfish.jersey.servlet,
                             com.fasterxml.jackson.databind,
                             com.fasterxml.jackson.databind.node,
                             com.fasterxml.jackson.core,
diff --git a/apps/segmentrouting/src/main/webapp/WEB-INF/web.xml b/apps/segmentrouting/src/main/webapp/WEB-INF/web.xml
index 94c0d7d..0bbfdfa 100644
--- a/apps/segmentrouting/src/main/webapp/WEB-INF/web.xml
+++ b/apps/segmentrouting/src/main/webapp/WEB-INF/web.xml
@@ -22,13 +22,9 @@
 
     <servlet>
         <servlet-name>JAX-RS Service</servlet-name>
-        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
+        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
-            <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
-            <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig</param-value>
-        </init-param>
-        <init-param>
-            <param-name>com.sun.jersey.config.property.classnames</param-name>
+            <param-name>jersey.config.server.provider.classnames</param-name>
             <param-value>
                 org.onosproject.segmentrouting.web.TunnelWebResource,
                 org.onosproject.segmentrouting.web.PolicyWebResource
diff --git a/apps/test/demo/pom.xml b/apps/test/demo/pom.xml
index 9923d6c..0ab7e72 100644
--- a/apps/test/demo/pom.xml
+++ b/apps/test/demo/pom.xml
@@ -63,8 +63,8 @@
         </dependency>
 
         <dependency>
-            <groupId>com.sun.jersey</groupId>
-            <artifactId>jersey-servlet</artifactId>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-servlet</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
@@ -102,9 +102,8 @@
                             org.slf4j,
                             org.osgi.framework,
                             javax.ws.rs,javax.ws.rs.core,
-                            com.sun.jersey.api.core,
-                            com.sun.jersey.spi.container.servlet,
-                            com.sun.jersey.server.impl.container.servlet,
+                            org.glassfish.jersey,
+                            org.glassfish.jersey.servlet,
                             com.fasterxml.jackson.databind,
                             com.fasterxml.jackson.databind.node,
                             org.apache.commons.lang.math.*,
diff --git a/apps/test/demo/src/main/webapp/WEB-INF/web.xml b/apps/test/demo/src/main/webapp/WEB-INF/web.xml
index 29716df..149ac96 100644
--- a/apps/test/demo/src/main/webapp/WEB-INF/web.xml
+++ b/apps/test/demo/src/main/webapp/WEB-INF/web.xml
@@ -22,13 +22,9 @@
 
     <servlet>
         <servlet-name>JAX-RS Service</servlet-name>
-        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
+        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
-            <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
-            <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig</param-value>
-        </init-param>
-        <init-param>
-            <param-name>com.sun.jersey.config.property.classnames</param-name>
+            <param-name>jersey.config.server.provider.classnames</param-name>
             <param-value>
                 org.onosproject.demo.DemoResource
             </param-value>
diff --git a/apps/virtualbng/features.xml b/apps/virtualbng/features.xml
index c997d4c..46ae075 100644
--- a/apps/virtualbng/features.xml
+++ b/apps/virtualbng/features.xml
@@ -17,7 +17,7 @@
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}">
     <feature name="${project.artifactId}" version="${project.version}"
              description="${project.description}">
-        <bundle>mvn:com.sun.jersey/jersey-client/1.19</bundle>
+        <bundle>mvn:org.glassfish.jersey.core/jersey-client/2.22.2</bundle>
         <bundle>mvn:${project.groupId}/onos-app-virtualbng/${project.version}</bundle>
         <feature>onos-thirdparty-web</feature>
     </feature>
diff --git a/apps/virtualbng/pom.xml b/apps/virtualbng/pom.xml
index dd38eab..8619328 100644
--- a/apps/virtualbng/pom.xml
+++ b/apps/virtualbng/pom.xml
@@ -48,9 +48,8 @@
 
     <dependencies>
         <dependency>
-            <groupId>com.sun.jersey</groupId>
+            <groupId>org.glassfish.jersey.core</groupId>
             <artifactId>jersey-client</artifactId>
-            <version>${jersey.version}</version>
         </dependency>
         <dependency>
             <groupId>org.onosproject</groupId>
@@ -68,8 +67,8 @@
         </dependency>
         <dependency>
             <groupId>javax.ws.rs</groupId>
-            <artifactId>jsr311-api</artifactId>
-            <version>1.1.1</version>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>2.0.1</version>
         </dependency>
     </dependencies>
 
@@ -93,9 +92,8 @@
                             org.slf4j,
                             javax.ws.rs,
                             javax.ws.rs.core,
-                            com.sun.jersey.api.core,
-                            com.sun.jersey.api.client,
-                            com.sun.jersey.spi.container.servlet,
+                            org.glassfish.jersey,
+                            org.glassfish.jersey.servlet,
                             com.sun.jersey.server.impl.container.servlet,
                             com.fasterxml.jackson.databind,
                             com.fasterxml.jackson.databind.node,
diff --git a/apps/virtualbng/src/main/java/org/onosproject/virtualbng/RestClient.java b/apps/virtualbng/src/main/java/org/onosproject/virtualbng/RestClient.java
index e779fe7..e930573 100644
--- a/apps/virtualbng/src/main/java/org/onosproject/virtualbng/RestClient.java
+++ b/apps/virtualbng/src/main/java/org/onosproject/virtualbng/RestClient.java
@@ -16,22 +16,23 @@
  */
 package org.onosproject.virtualbng;
 
-import static com.google.common.net.MediaType.JSON_UTF_8;
-import static java.net.HttpURLConnection.HTTP_OK;
-import static org.slf4j.LoggerFactory.getLogger;
-
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.sun.jersey.api.client.Client;
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.WebResource;
-
-import java.io.IOException;
-
 import org.onlab.packet.IpAddress;
 import org.slf4j.Logger;
 
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.client.Invocation;
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.Response;
+import java.io.IOException;
+
+import static com.google.common.net.MediaType.JSON_UTF_8;
+import static java.net.HttpURLConnection.HTTP_OK;
+import static org.slf4j.LoggerFactory.getLogger;
+
 public class RestClient {
     private final Logger log = getLogger(getClass());
     private static final String UTF_8 = JSON_UTF_8.toString();
@@ -51,14 +52,14 @@
     /**
      * Gets a client web resource builder.
      *
-     * @param url the URL to access remote resource
+     * @param localUrl the URL to access remote resource
      * @return web resource builder
      */
-    public WebResource.Builder getClientBuilder(String url) {
-        log.info("URL: {}", url);
-        Client client = Client.create();
-        WebResource resource = client.resource(url);
-        return resource.accept(UTF_8).type(UTF_8);
+    public Invocation.Builder getClientBuilder(String localUrl) {
+        log.info("URL: {}", localUrl);
+        Client client = ClientBuilder.newClient();
+        WebTarget wt = client.target(localUrl);
+        return wt.request(UTF_8);
     }
 
     /**
@@ -67,8 +68,8 @@
      * @return the vBNG map if REST GET succeeds, otherwise return null
      */
     public ObjectNode getRest() {
-        WebResource.Builder builder = getClientBuilder(url);
-        ClientResponse response = builder.get(ClientResponse.class);
+        Invocation.Builder builder = getClientBuilder(url);
+        Response response = builder.get();
 
         if (response.getStatus() != HTTP_OK) {
             log.info("REST GET request returned error code {}",
@@ -76,7 +77,7 @@
             return null;
         }
 
-        String jsonString = response.getEntity(String.class);
+        String jsonString = builder.get(String.class);
         log.info("Fetched JSON string: {}", jsonString);
 
         JsonNode node;
diff --git a/apps/virtualbng/src/main/webapp/WEB-INF/web.xml b/apps/virtualbng/src/main/webapp/WEB-INF/web.xml
index e8e0071..343698f 100644
--- a/apps/virtualbng/src/main/webapp/WEB-INF/web.xml
+++ b/apps/virtualbng/src/main/webapp/WEB-INF/web.xml
@@ -22,13 +22,9 @@
 
     <servlet>
         <servlet-name>JAX-RS Service</servlet-name>
-        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
+        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
-            <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
-            <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig</param-value>
-        </init-param>
-        <init-param>
-            <param-name>com.sun.jersey.config.property.classnames</param-name>
+            <param-name>javax.ws.rs.Application</param-name>
             <param-value>
                 org.onosproject.virtualbng.VbngResource
             </param-value>
diff --git a/apps/vtn/pom.xml b/apps/vtn/pom.xml
index 5c4109d..af624a3 100644
--- a/apps/vtn/pom.xml
+++ b/apps/vtn/pom.xml
@@ -67,17 +67,17 @@
             <classifier>tests</classifier>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey</groupId>
-            <artifactId>jersey-servlet</artifactId>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-servlet</artifactId>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey.jersey-test-framework</groupId>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
             <artifactId>jersey-test-framework-core</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey.jersey-test-framework</groupId>
-            <artifactId>jersey-test-framework-grizzly2</artifactId>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/apps/vtn/vtnmgr/pom.xml b/apps/vtn/vtnmgr/pom.xml
index 14ae4b8..4d2c69c 100644
--- a/apps/vtn/vtnmgr/pom.xml
+++ b/apps/vtn/vtnmgr/pom.xml
@@ -32,8 +32,8 @@
     <dependencies>
         <dependency>
             <groupId>javax.ws.rs</groupId>
-            <artifactId>jsr311-api</artifactId>
-            <version>1.1.1</version>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>2.0.1</version>
         </dependency>
         <dependency>
             <groupId>org.onosproject</groupId>
diff --git a/apps/vtn/vtnweb/pom.xml b/apps/vtn/vtnweb/pom.xml
index 8ee36e0..02bd197 100644
--- a/apps/vtn/vtnweb/pom.xml
+++ b/apps/vtn/vtnweb/pom.xml
@@ -36,8 +36,8 @@
     <dependencies>
         <dependency>
             <groupId>javax.ws.rs</groupId>
-            <artifactId>jsr311-api</artifactId>
-            <version>1.1.1</version>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>2.0.1</version>
         </dependency>
         <dependency>
             <groupId>org.onosproject</groupId>
@@ -62,9 +62,8 @@
                             org.osgi.framework,
                             javax.ws.rs,
                             javax.ws.rs.core,
-                            com.sun.jersey.api.core,
-                            com.sun.jersey.spi.container.servlet,
-                            com.sun.jersey.server.impl.container.servlet,
+                            org.glassfish.jersey,
+                            org.glassfish.jersey.servlet,
                             com.fasterxml.jackson.databind,
                             com.fasterxml.jackson.databind.node,
                             com.fasterxml.jackson.core,
diff --git a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/VtnWebApplication.java b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/VtnWebApplication.java
index 4f24a2f..8925b4a 100644
--- a/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/VtnWebApplication.java
+++ b/apps/vtn/vtnweb/src/main/java/org/onosproject/vtnweb/resources/VtnWebApplication.java
@@ -34,7 +34,8 @@
                           PortPairGroupWebResource.class,
                           PortPairWebResource.class,
                           FloatingIpWebResource.class,
-                          RouterWebResource.class);
+                          RouterWebResource.class,
+                          ClassifierWebResource.class);
     }
 }
 
diff --git a/apps/vtn/vtnweb/src/main/webapp/WEB-INF/web.xml b/apps/vtn/vtnweb/src/main/webapp/WEB-INF/web.xml
index abc83e4..305222f 100644
--- a/apps/vtn/vtnweb/src/main/webapp/WEB-INF/web.xml
+++ b/apps/vtn/vtnweb/src/main/webapp/WEB-INF/web.xml
@@ -43,7 +43,7 @@
 
     <servlet>
         <servlet-name>JAX-RS Service</servlet-name>
-        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
+        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
             <param-name>javax.ws.rs.Application</param-name>
             <param-value>org.onosproject.vtnweb.resources.VtnWebApplication</param-value>
diff --git a/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/ClassifierResourceTest.java b/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/ClassifierResourceTest.java
index 789ae89..310cb41 100644
--- a/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/ClassifierResourceTest.java
+++ b/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/ClassifierResourceTest.java
@@ -15,16 +15,9 @@
  */
 package org.onosproject.vtnweb.resources;
 
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.notNullValue;
-import static org.junit.Assert.assertThat;
-import static org.onosproject.net.NetTestTools.device;
-import static org.onosproject.net.NetTestTools.did;
-
 import com.eclipsesource.json.Json;
+import com.eclipsesource.json.JsonObject;
+import com.google.common.collect.ImmutableList;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -37,9 +30,17 @@
 import org.onosproject.vtnrsc.classifier.ClassifierService;
 import org.onosproject.vtnweb.web.SfcCodecContext;
 
-import com.eclipsesource.json.JsonObject;
-import com.google.common.collect.ImmutableList;
-import com.sun.jersey.api.client.WebResource;
+import javax.ws.rs.client.WebTarget;
+
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.junit.Assert.assertThat;
+import static org.onosproject.net.NetTestTools.device;
+import static org.onosproject.net.NetTestTools.did;
+
 /**
  * Unit tests for classifier REST APIs.
  */
@@ -75,8 +76,8 @@
 
         expect(classifierService.getClassifiers()).andReturn(null).anyTimes();
         replay(classifierService);
-        final WebResource rs = resource();
-        final String response = rs.path("classifiers").get(String.class);
+        final WebTarget wt = target();
+        final String response = wt.path("classifiers").request().get(String.class);
         assertThat(response, is("{\"classifiers\":[]}"));
     }
 
@@ -92,8 +93,8 @@
         expect(classifierService.getClassifiers()).andReturn(ImmutableList.of(devId1)).anyTimes();
         replay(classifierService);
 
-        final WebResource rs = resource();
-        final String response = rs.path("classifiers").get(String.class);
+        final WebTarget wt = target();
+        final String response = wt.path("classifiers").request().get(String.class);
         final JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
     }
diff --git a/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/FlowClassifierResourceTest.java b/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/FlowClassifierResourceTest.java
index 1242907..4ce8e7b 100644
--- a/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/FlowClassifierResourceTest.java
+++ b/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/FlowClassifierResourceTest.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;
@@ -49,10 +32,26 @@
 import org.onosproject.vtnrsc.flowclassifier.FlowClassifierService;
 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 flow classifier REST APIs.
  */
@@ -219,8 +218,8 @@
 
         expect(flowClassifierService.getFlowClassifiers()).andReturn(null).anyTimes();
         replay(flowClassifierService);
-        final WebResource rs = resource();
-        final String response = rs.path("flow_classifiers").get(String.class);
+        final WebTarget wt = target();
+        final String response = wt.path("flow_classifiers").request().get(String.class);
         assertThat(response, is("{\"flow_classifiers\":[]}"));
     }
 
@@ -237,8 +236,9 @@
         expect(flowClassifierService.getFlowClassifier(anyObject())).andReturn(flowClassifier1).anyTimes();
         replay(flowClassifierService);
 
-        final WebResource rs = resource();
-        final String response = rs.path("flow_classifiers/4a334cd4-fe9c-4fae-af4b-321c5e2eb051").get(String.class);
+        final WebTarget wt = target();
+        final String response = wt.path("flow_classifiers/4a334cd4-fe9c-4fae-af4b-321c5e2eb051")
+                                  .request().get(String.class);
         final JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
     }
@@ -251,13 +251,14 @@
         expect(flowClassifierService.getFlowClassifier(anyObject()))
         .andReturn(null).anyTimes();
         replay(flowClassifierService);
-        WebResource rs = resource();
+        WebTarget wt = target();
         try {
-            rs.path("flow_classifiers/78dcd363-fc23-aeb6-f44b-56dc5aafb3ae").get(String.class);
+            wt.path("flow_classifiers/78dcd363-fc23-aeb6-f44b-56dc5aafb3ae")
+                    .request().get(String.class);
             fail("Fetch of non-existent flow classifier 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"));
         }
     }
 
@@ -271,12 +272,12 @@
         .andReturn(true).anyTimes();
         replay(flowClassifierService);
 
-        WebResource rs = resource();
+        WebTarget wt = target();
         InputStream jsonStream = FlowClassifierResourceTest.class.getResourceAsStream("post-FlowClassifier.json");
 
-        ClientResponse response = rs.path("flow_classifiers")
-                .type(MediaType.APPLICATION_JSON_TYPE)
-                .post(ClientResponse.class, jsonStream);
+        Response response = wt.path("flow_classifiers")
+                .request(MediaType.APPLICATION_JSON_TYPE)
+                .post(Entity.json(jsonStream));
         assertThat(response.getStatus(), is(HttpURLConnection.HTTP_OK));
     }
 
@@ -289,13 +290,13 @@
         .andReturn(true).anyTimes();
         replay(flowClassifierService);
 
-        WebResource rs = resource();
+        WebTarget wt = target();
 
         String location = "flow_classifiers/4a334cd4-fe9c-4fae-af4b-321c5e2eb051";
 
-        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));
     }
diff --git a/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/PortChainResourceTest.java b/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/PortChainResourceTest.java
index b4447f1..6fa7933 100644
--- a/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/PortChainResourceTest.java
+++ b/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/PortChainResourceTest.java
@@ -15,26 +15,10 @@
  */
 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.List;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Set;
-
-import javax.ws.rs.core.MediaType;
-
+import com.eclipsesource.json.Json;
+import com.eclipsesource.json.JsonObject;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -53,13 +37,28 @@
 import org.onosproject.vtnrsc.portchain.PortChainService;
 import org.onosproject.vtnweb.web.SfcCodecContext;
 
-import com.eclipsesource.json.Json;
-import com.eclipsesource.json.JsonObject;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-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.List;
+import java.util.Objects;
+import java.util.Optional;
+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 chain REST APIs.
@@ -203,8 +202,8 @@
 
         expect(portChainService.getPortChains()).andReturn(null).anyTimes();
         replay(portChainService);
-        final WebResource rs = resource();
-        final String response = rs.path("port_chains").get(String.class);
+        final WebTarget wt = target();
+        final String response = wt.path("port_chains").request().get(String.class);
         assertThat(response, is("{\"port_chains\":[]}"));
     }
 
@@ -221,8 +220,9 @@
         expect(portChainService.getPortChain(anyObject())).andReturn(portChain1).anyTimes();
         replay(portChainService);
 
-        final WebResource rs = resource();
-        final String response = rs.path("port_chains/1278dcd4-459f-62ed-754b-87fc5e4a6751").get(String.class);
+        final WebTarget wt = target();
+        final String response = wt.path("port_chains/1278dcd4-459f-62ed-754b-87fc5e4a6751")
+                .request().get(String.class);
         final JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
     }
@@ -235,13 +235,14 @@
         expect(portChainService.getPortChain(anyObject()))
         .andReturn(null).anyTimes();
         replay(portChainService);
-        WebResource rs = resource();
+        WebTarget wt = target();
         try {
-            rs.path("port_chains/78dcd363-fc23-aeb6-f44b-56dc5aafb3ae").get(String.class);
+            wt.path("port_chains/78dcd363-fc23-aeb6-f44b-56dc5aafb3ae")
+                    .request().get(String.class);
             fail("Fetch of non-existent port chain 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"));
         }
     }
 
@@ -255,12 +256,12 @@
         .andReturn(true).anyTimes();
         replay(portChainService);
 
-        WebResource rs = resource();
+        WebTarget wt = target();
         InputStream jsonStream = PortChainResourceTest.class.getResourceAsStream("post-PortChain.json");
 
-        ClientResponse response = rs.path("port_chains")
-                .type(MediaType.APPLICATION_JSON_TYPE)
-                .post(ClientResponse.class, jsonStream);
+        Response response = wt.path("port_chains")
+                .request(MediaType.APPLICATION_JSON_TYPE)
+                .post(Entity.json(jsonStream));
         assertThat(response.getStatus(), is(HttpURLConnection.HTTP_OK));
     }
 
@@ -273,13 +274,13 @@
         .andReturn(true).anyTimes();
         replay(portChainService);
 
-        WebResource rs = resource();
+        WebTarget wt = target();
 
         String location = "port_chains/1278dcd4-459f-62ed-754b-87fc5e4a6751";
 
-        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));
     }
diff --git a/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/PortPairGroupResourceTest.java b/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/PortPairGroupResourceTest.java
index 9b7c987..b631def 100644
--- a/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/PortPairGroupResourceTest.java
+++ b/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/PortPairGroupResourceTest.java
@@ -15,25 +15,10 @@
  */
 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.List;
-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 com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -48,13 +33,27 @@
 import org.onosproject.vtnrsc.portpairgroup.PortPairGroupService;
 import org.onosproject.vtnweb.web.SfcCodecContext;
 
-import com.eclipsesource.json.Json;
-import com.eclipsesource.json.JsonObject;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-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.List;
+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 group REST APIs.
  */
@@ -163,8 +162,8 @@
 
         expect(portPairGroupService.getPortPairGroups()).andReturn(null).anyTimes();
         replay(portPairGroupService);
-        final WebResource rs = resource();
-        final String response = rs.path("port_pair_groups").get(String.class);
+        final WebTarget wt = target();
+        final String response = wt.path("port_pair_groups").request().get(String.class);
         assertThat(response, is("{\"port_pair_groups\":[]}"));
     }
 
@@ -181,8 +180,9 @@
         expect(portPairGroupService.getPortPairGroup(anyObject())).andReturn(portPairGroup1).anyTimes();
         replay(portPairGroupService);
 
-        final WebResource rs = resource();
-        final String response = rs.path("port_pair_groups/4512d643-24fc-4fae-af4b-321c5e2eb3d1").get(String.class);
+        final WebTarget wt = target();
+        final String response = wt.path("port_pair_groups/4512d643-24fc-4fae-af4b-321c5e2eb3d1")
+                .request().get(String.class);
         final JsonObject result = Json.parse(response).asObject();
         assertThat(result, notNullValue());
     }
@@ -195,13 +195,14 @@
         expect(portPairGroupService.getPortPairGroup(anyObject()))
         .andReturn(null).anyTimes();
         replay(portPairGroupService);
-        WebResource rs = resource();
+        WebTarget wt = target();
         try {
-            rs.path("port_pair_groups/78dcd363-fc23-aeb6-f44b-56dc5aafb3ae").get(String.class);
+            wt.path("port_pair_groups/78dcd363-fc23-aeb6-f44b-56dc5aafb3ae")
+                    .request().get(String.class);
             fail("Fetch of non-existent port pair group 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"));
         }
     }
 
@@ -215,12 +216,12 @@
         .andReturn(true).anyTimes();
         replay(portPairGroupService);
 
-        WebResource rs = resource();
+        WebTarget wt = target();
         InputStream jsonStream = PortPairGroupResourceTest.class.getResourceAsStream("post-PortPairGroup.json");
 
-        ClientResponse response = rs.path("port_pair_groups")
-                .type(MediaType.APPLICATION_JSON_TYPE)
-                .post(ClientResponse.class, jsonStream);
+        Response response = wt.path("port_pair_groups")
+                .request(MediaType.APPLICATION_JSON_TYPE)
+                .post(Entity.json(jsonStream));
         assertThat(response.getStatus(), is(HttpURLConnection.HTTP_OK));
     }
 
@@ -233,13 +234,13 @@
         .andReturn(true).anyTimes();
         replay(portPairGroupService);
 
-        WebResource rs = resource();
+        WebTarget wt = target();
 
         String location = "port_pair_groups/4512d643-24fc-4fae-af4b-321c5e2eb3d1";
 
-        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));
     }
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));
     }
diff --git a/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/VtnResourceTest.java b/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/VtnResourceTest.java
index 4b95844..af9c15b 100644
--- a/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/VtnResourceTest.java
+++ b/apps/vtn/vtnweb/src/test/java/org/onosproject/vtnweb/resources/VtnResourceTest.java
@@ -15,12 +15,8 @@
  */
 package org.onosproject.vtnweb.resources;
 
-import java.io.IOException;
-import java.net.ServerSocket;
-
-import com.sun.jersey.test.framework.AppDescriptor;
-import com.sun.jersey.test.framework.JerseyTest;
-import com.sun.jersey.test.framework.WebAppDescriptor;
+import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.test.JerseyTest;
 
 /**
  * Base class for VTN REST API tests.  Performs common configuration operations.
@@ -28,27 +24,9 @@
 public class VtnResourceTest extends JerseyTest {
 
     /**
-     * Assigns an available port for the test.
-     *
-     * @param defaultPort If a port cannot be determined, this one is used.
-     * @return free port
+     * Creates a new web-resource test.
      */
-    @Override
-    public int getPort(int defaultPort) {
-        try {
-            ServerSocket socket = new ServerSocket(0);
-            socket.setReuseAddress(true);
-            int port = socket.getLocalPort();
-            socket.close();
-            return port;
-        } catch (IOException ioe) {
-            return defaultPort;
-        }
+    public VtnResourceTest() {
+        super(ResourceConfig.forApplicationClass(VtnWebApplication.class));
     }
-
-    @Override
-    public AppDescriptor configure() {
-        return new WebAppDescriptor.Builder("org.onosproject.vtnweb.resources").build();
-    }
-
 }
diff --git a/apps/xos-integration/features.xml b/apps/xos-integration/features.xml
index 6b08b63..f66ad73 100644
--- a/apps/xos-integration/features.xml
+++ b/apps/xos-integration/features.xml
@@ -17,7 +17,7 @@
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}">
     <feature name="${project.artifactId}" version="${project.version}"
              description="${project.description}">
-        <bundle>mvn:com.sun.jersey/jersey-client/1.19</bundle>
+        <bundle>mvn:org.glassfish.jersey.core/jersey-client/2.22.2</bundle>
         <bundle>mvn:${project.groupId}/${project.artifactId}/${project.version}</bundle>
     </feature>
 </features>
diff --git a/apps/xos-integration/pom.xml b/apps/xos-integration/pom.xml
index 08d6191..582ef77 100644
--- a/apps/xos-integration/pom.xml
+++ b/apps/xos-integration/pom.xml
@@ -45,9 +45,9 @@
             <artifactId>org.osgi.compendium</artifactId>
         </dependency>
         <dependency>
-            <groupId>com.sun.jersey</groupId>
+            <groupId>org.glassfish.jersey.core</groupId>
             <artifactId>jersey-client</artifactId>
-            <version>1.19</version>
+            <version>2.22.2</version>
         </dependency>
         <dependency>
             <groupId>org.onosproject</groupId>
diff --git a/apps/xos-integration/src/main/java/org/onosproject/xosintegration/OnosXosIntegrationManager.java b/apps/xos-integration/src/main/java/org/onosproject/xosintegration/OnosXosIntegrationManager.java
index df3a29f..5c57702 100644
--- a/apps/xos-integration/src/main/java/org/onosproject/xosintegration/OnosXosIntegrationManager.java
+++ b/apps/xos-integration/src/main/java/org/onosproject/xosintegration/OnosXosIntegrationManager.java
@@ -18,11 +18,6 @@
 import com.eclipsesource.json.JsonArray;
 import com.eclipsesource.json.JsonObject;
 import com.google.common.collect.Maps;
-import com.sun.jersey.api.client.Client;
-import com.sun.jersey.api.client.ClientHandlerException;
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.WebResource;
-import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -31,6 +26,7 @@
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
+import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
 import org.onlab.packet.VlanId;
 import org.onlab.util.Tools;
 import org.onosproject.cfg.ComponentConfigService;
@@ -49,6 +45,12 @@
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
 
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.Invocation;
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.Response;
 import java.util.Dictionary;
 import java.util.Map;
 import java.util.Set;
@@ -207,7 +209,7 @@
      * @deprecated in Cardinal Release
      */
     @Deprecated
-    private WebResource.Builder getClientBuilder() {
+    private Invocation.Builder getClientBuilder() {
         return getClientBuilder("");
     }
 
@@ -219,15 +221,14 @@
      * @deprecated in Cardinal Release
      */
     @Deprecated
-    private WebResource.Builder getClientBuilder(String uri) {
+    private Invocation.Builder getClientBuilder(String uri) {
         String baseUrl = "http://" + xosServerAddress + ":"
                 + Integer.toString(xosServerPort);
-        Client client = Client.create();
-        client.addFilter(new HTTPBasicAuthFilter("padmin@vicci.org", "letmein"));
-        WebResource resource = client.resource(baseUrl
+        Client client = ClientBuilder.newClient();
+        client.register(HttpAuthenticationFeature.basic("padmin@vicci.org", "letmein"));
+        WebTarget wt = client.target(baseUrl
                 + XOS_TENANT_BASE_URI + uri);
-        return resource.accept(JSON_UTF_8.toString())
-                .type(JSON_UTF_8.toString());
+        return wt.request(JSON_UTF_8.toString());
     }
 
     /**
@@ -250,14 +251,14 @@
      */
     @Deprecated
     private String getRest(String uri) {
-        WebResource.Builder builder = getClientBuilder(uri);
-        ClientResponse response = builder.get(ClientResponse.class);
+        Invocation.Builder builder = getClientBuilder(uri);
+        Response response = builder.get();
 
         if (response.getStatus() != HTTP_OK) {
             log.info("REST GET request returned error code {}",
                     response.getStatus());
         }
-        String jsonString = response.getEntity(String.class);
+        String jsonString = builder.get(String.class);
         log.info("JSON read:\n{}", jsonString);
 
         return jsonString;
@@ -272,21 +273,14 @@
      */
     @Deprecated
     private String postRest(String json) {
-        WebResource.Builder builder = getClientBuilder();
-        ClientResponse response;
-
-        try {
-            response = builder.post(ClientResponse.class, json);
-        } catch (ClientHandlerException e) {
-            log.warn("Unable to contact REST server: {}", e.getMessage());
-            return "{ \"error\" : \"oops no one home\" }";
-        }
+        Invocation.Builder builder = getClientBuilder();
+        Response response = builder.post(Entity.json(json));
 
         if (response.getStatus() != HTTP_CREATED) {
             log.info("REST POST request returned error code {}",
                     response.getStatus());
         }
-        return response.getEntity(String.class);
+        return builder.post(Entity.json(json), String.class);
     }
 
     /**
@@ -298,8 +292,8 @@
      */
     @Deprecated
     private void deleteRest(String uri) {
-        WebResource.Builder builder = getClientBuilder(uri);
-        ClientResponse response = builder.delete(ClientResponse.class);
+        Invocation.Builder builder = getClientBuilder(uri);
+        Response response = builder.delete();
 
         if (response.getStatus() != HTTP_NO_CONTENT) {
             log.info("REST DELETE request returned error code {}",
@@ -507,17 +501,11 @@
 
         String baseUrl = "http://" + FABRIC_CONTROLLER_ADDRESS + ":"
                 + Integer.toString(FABRIC_SERVER_PORT);
-        Client client = Client.create();
-        WebResource resource = client.resource(baseUrl + FABRIC_BASE_URI);
-        WebResource.Builder builder = resource.accept(JSON_UTF_8.toString())
-                .type(JSON_UTF_8.toString());
+        Client client = ClientBuilder.newClient();
+        WebTarget wt = client.target(baseUrl + FABRIC_BASE_URI);
+        Invocation.Builder builder = wt.request(JSON_UTF_8.toString());
 
-        try {
-            builder.post(ClientResponse.class, node.toString());
-        } catch (ClientHandlerException e) {
-            log.warn("Unable to contact fabric REST server: {}", e.getMessage());
-            return;
-        }
+        builder.post(Entity.json(node.toString()));
     }
 
     /**
