7bd2447
diff --git org.eclipse.m2e.tests.common/META-INF/MANIFEST.MF org.eclipse.m2e.tests.common/META-INF/MANIFEST.MF
7bd2447
index a1500e2..de30383 100644
7bd2447
--- org.eclipse.m2e.tests.common/META-INF/MANIFEST.MF
7bd2447
+++ org.eclipse.m2e.tests.common/META-INF/MANIFEST.MF
7bd2447
@@ -11,14 +11,17 @@ Require-Bundle: org.junit;bundle-version="4.0.0",
7bd2447
  org.eclipse.core.runtime,
7bd2447
  org.eclipse.jdt.core,
7bd2447
  org.eclipse.debug.core,
7bd2447
- org.eclipse.core.resources
7bd2447
+ org.eclipse.core.resources,
7bd2447
+ org.eclipse.jetty.server,
7bd2447
+ org.eclipse.jetty.util,
7bd2447
+ org.eclipse.jetty.http,
7bd2447
+ org.eclipse.jetty.security,
7bd2447
+ org.eclipse.jetty.io
7bd2447
 Bundle-ActivationPolicy: lazy
7bd2447
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
7bd2447
-Bundle-ClassPath: .,
7bd2447
- jars/javax.servlet_2.5.0.v201103041518.jar,
7bd2447
- jars/org.mortbay.jetty.server_6.1.23.v201012071420.jar,
7bd2447
- jars/org.mortbay.jetty.util_6.1.23.v201012071420.jar
7bd2447
 Bundle-Vendor: %Bundle-Vendor
7bd2447
 MavenArtifact-GroupId: org.eclipse.m2e
7bd2447
 MavenArtifact-ArtifactId: org.eclipse.m2e.tests.common
7bd2447
 Export-Package: org.eclipse.m2e.tests.common;x-internal:=true
7bd2447
+Import-Package: javax.servlet;version="3.1.0",
7bd2447
+ javax.servlet.http;version="3.1.0"
7bd2447
diff --git org.eclipse.m2e.tests.common/build.properties org.eclipse.m2e.tests.common/build.properties
7bd2447
index 51bead7..3873d38 100644
7bd2447
--- org.eclipse.m2e.tests.common/build.properties
7bd2447
+++ org.eclipse.m2e.tests.common/build.properties
7bd2447
@@ -14,6 +14,5 @@ output.. = target/classes/
7bd2447
 bin.includes = META-INF/,\
7bd2447
                .,\
7bd2447
                about.html,\
7bd2447
-               jars/,\
7bd2447
                OSGI-INF/
7bd2447
 src.includes = about.html
7bd2447
diff --git org.eclipse.m2e.tests.common/src/org/eclipse/m2e/tests/common/HttpServer.java org.eclipse.m2e.tests.common/src/org/eclipse/m2e/tests/common/HttpServer.java
7bd2447
index 5851e7e..4205804 100644
7bd2447
--- org.eclipse.m2e.tests.common/src/org/eclipse/m2e/tests/common/HttpServer.java
7bd2447
+++ org.eclipse.m2e.tests.common/src/org/eclipse/m2e/tests/common/HttpServer.java
7bd2447
@@ -11,6 +11,8 @@
7bd2447
 
7bd2447
 package org.eclipse.m2e.tests.common;
7bd2447
 
7bd2447
+import static org.junit.Assert.fail;
7bd2447
+
7bd2447
 import java.io.File;
7bd2447
 import java.io.FileInputStream;
7bd2447
 import java.io.FileOutputStream;
7bd2447
@@ -23,28 +25,36 @@ import java.util.HashMap;
7bd2447
 import java.util.HashSet;
7bd2447
 import java.util.List;
7bd2447
 import java.util.Map;
7bd2447
+import java.util.Properties;
7bd2447
 import java.util.TreeMap;
7bd2447
 
7bd2447
 import javax.servlet.http.HttpServletRequest;
7bd2447
 import javax.servlet.http.HttpServletResponse;
7bd2447
 
7bd2447
-import org.mortbay.jetty.Connector;
7bd2447
-import org.mortbay.jetty.Handler;
7bd2447
-import org.mortbay.jetty.HttpMethods;
7bd2447
-import org.mortbay.jetty.Request;
7bd2447
-import org.mortbay.jetty.Server;
7bd2447
-import org.mortbay.jetty.handler.AbstractHandler;
7bd2447
-import org.mortbay.jetty.handler.DefaultHandler;
7bd2447
-import org.mortbay.jetty.handler.HandlerList;
7bd2447
-import org.mortbay.jetty.nio.SelectChannelConnector;
7bd2447
-import org.mortbay.jetty.security.B64Code;
7bd2447
-import org.mortbay.jetty.security.Constraint;
7bd2447
-import org.mortbay.jetty.security.ConstraintMapping;
7bd2447
-import org.mortbay.jetty.security.HashUserRealm;
7bd2447
-import org.mortbay.jetty.security.SecurityHandler;
7bd2447
-import org.mortbay.jetty.security.SslSocketConnector;
7bd2447
-import org.mortbay.util.IO;
7bd2447
-import org.mortbay.util.URIUtil;
7bd2447
+import org.eclipse.jetty.http.HttpMethod;
7bd2447
+import org.eclipse.jetty.http.HttpVersion;
7bd2447
+import org.eclipse.jetty.security.ConstraintMapping;
7bd2447
+import org.eclipse.jetty.security.ConstraintSecurityHandler;
7bd2447
+import org.eclipse.jetty.security.HashLoginService;
7bd2447
+import org.eclipse.jetty.security.SecurityHandler;
7bd2447
+import org.eclipse.jetty.security.authentication.BasicAuthenticator;
7bd2447
+import org.eclipse.jetty.server.Connector;
7bd2447
+import org.eclipse.jetty.server.Handler;
7bd2447
+import org.eclipse.jetty.server.HttpConfiguration;
7bd2447
+import org.eclipse.jetty.server.HttpConnectionFactory;
7bd2447
+import org.eclipse.jetty.server.NetworkConnector;
7bd2447
+import org.eclipse.jetty.server.Request;
7bd2447
+import org.eclipse.jetty.server.Server;
7bd2447
+import org.eclipse.jetty.server.ServerConnector;
7bd2447
+import org.eclipse.jetty.server.SslConnectionFactory;
7bd2447
+import org.eclipse.jetty.server.handler.AbstractHandler;
7bd2447
+import org.eclipse.jetty.server.handler.DefaultHandler;
7bd2447
+import org.eclipse.jetty.server.handler.HandlerList;
7bd2447
+import org.eclipse.jetty.util.B64Code;
7bd2447
+import org.eclipse.jetty.util.IO;
7bd2447
+import org.eclipse.jetty.util.URIUtil;
7bd2447
+import org.eclipse.jetty.util.security.Constraint;
7bd2447
+import org.eclipse.jetty.util.ssl.SslContextFactory;
7bd2447
 
7bd2447
 
7bd2447
 /**
7bd2447
@@ -101,24 +111,29 @@ public class HttpServer {
7bd2447
   private String storePassword;
7bd2447
 
7bd2447
   protected Connector newHttpConnector() {
7bd2447
-    SelectChannelConnector connector = new SelectChannelConnector();
7bd2447
+    HttpConfiguration config = new HttpConfiguration();
7bd2447
+    config.setSecurePort(httpsPort);
7bd2447
+    ServerConnector connector = new ServerConnector(server, new HttpConnectionFactory(config));
7bd2447
     connector.setPort(httpPort);
7bd2447
     return connector;
7bd2447
   }
7bd2447
 
7bd2447
   protected Connector newHttpsConnector() {
7bd2447
-    SslSocketConnector connector = new SslSocketConnector();
7bd2447
-    connector.setPort(httpsPort);
7bd2447
-    connector.setKeystore(new File(keyStoreLocation).getAbsolutePath());
7bd2447
-    connector.setPassword(storePassword);
7bd2447
-    connector.setKeyPassword(keyStorePassword);
7bd2447
+    SslContextFactory sslContextFactory = new SslContextFactory();
7bd2447
+    sslContextFactory.setKeyManagerPassword(storePassword);
7bd2447
+    sslContextFactory.setKeyStorePath(new File(keyStoreLocation).getAbsolutePath());
7bd2447
+    sslContextFactory.setKeyStorePassword(keyStorePassword);
7bd2447
     if(trustStoreLocation != null && !trustStoreLocation.equals("")) {
7bd2447
-      connector.setTruststore(new File(trustStoreLocation).getAbsolutePath());
7bd2447
+      sslContextFactory.setTrustStorePath(new File(trustStoreLocation).getAbsolutePath());
7bd2447
     }
7bd2447
     if(trustStorePassword != null && !trustStoreLocation.equals("")) {
7bd2447
-      connector.setTrustPassword(trustStorePassword);
7bd2447
+      sslContextFactory.setTrustStorePassword(trustStorePassword);
7bd2447
     }
7bd2447
-    connector.setNeedClientAuth(needClientAuth);
7bd2447
+    sslContextFactory.setNeedClientAuth(needClientAuth);
7bd2447
+
7bd2447
+    ServerConnector connector = new ServerConnector(server,
7bd2447
+        new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString()));
7bd2447
+    connector.setPort(httpsPort);
7bd2447
     return connector;
7bd2447
   }
7bd2447
 
7bd2447
@@ -142,7 +157,7 @@ public class HttpServer {
7bd2447
    */
7bd2447
   public int getHttpPort() {
7bd2447
     if(httpPort >= 0 && server != null && server.isRunning()) {
7bd2447
-      return server.getConnectors()[0].getLocalPort();
7bd2447
+      return ((NetworkConnector) server.getConnectors()[0]).getLocalPort();
7bd2447
     }
7bd2447
     return httpPort;
7bd2447
   }
7bd2447
@@ -176,7 +191,7 @@ public class HttpServer {
7bd2447
    */
7bd2447
   public int getHttpsPort() {
7bd2447
     if(httpsPort >= 0 && server != null && server.isRunning()) {
7bd2447
-      return server.getConnectors()[(httpPort < 0) ? 0 : 1].getLocalPort();
7bd2447
+      return ((NetworkConnector) server.getConnectors()[(httpPort < 0) ? 0 : 1]).getLocalPort();
7bd2447
     }
7bd2447
     return httpsPort;
7bd2447
   }
7bd2447
@@ -260,12 +275,13 @@ public class HttpServer {
7bd2447
 
7bd2447
   protected Handler newProxyHandler() {
7bd2447
     return new AbstractHandler() {
7bd2447
-      public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch)
7bd2447
+      @Override
7bd2447
+      public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
7bd2447
           throws IOException {
7bd2447
         String auth = request.getHeader("Proxy-Authorization");
7bd2447
         if(auth != null) {
7bd2447
           auth = auth.substring(auth.indexOf(' ') + 1).trim();
7bd2447
-          auth = B64Code.decode(auth);
7bd2447
+          auth = new String(B64Code.decode(auth));
7bd2447
         }
7bd2447
 
7bd2447
         if(!(proxyUsername + ':' + proxyPassword).equals(auth)) {
7bd2447
@@ -293,8 +309,8 @@ public class HttpServer {
7bd2447
 
7bd2447
   protected Handler newSslRedirectHandler() {
7bd2447
     return new AbstractHandler() {
7bd2447
-
7bd2447
-      public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) {
7bd2447
+      @Override
7bd2447
+      public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) {
7bd2447
         int httpsPort = getHttpsPort();
7bd2447
         if(!((Request) request).isHandled() && request.getServerPort() != httpsPort) {
7bd2447
           String url = "https://" + request.getServerName() + ":" + httpsPort + request.getRequestURI();
7bd2447
@@ -336,7 +352,7 @@ public class HttpServer {
7bd2447
     return this;
7bd2447
   }
7bd2447
 
7bd2447
-  protected Handler newSecurityHandler() {
7bd2447
+  protected SecurityHandler newSecurityHandler() {
7bd2447
     List<ConstraintMapping> mappings = new ArrayList<ConstraintMapping>();
7bd2447
 
7bd2447
     for(String pathSpec : securedRealms.keySet()) {
7bd2447
@@ -354,22 +370,32 @@ public class HttpServer {
7bd2447
       mappings.add(constraintMapping);
7bd2447
     }
7bd2447
 
7bd2447
-    HashUserRealm userRealm = new HashUserRealm("TestRealm");
7bd2447
+    Properties p = new Properties();
7bd2447
     for(String username : userPasswords.keySet()) {
7bd2447
       String password = userPasswords.get(username);
7bd2447
       String[] roles = userRoles.get(username);
7bd2447
 
7bd2447
-      userRealm.put(username, password);
7bd2447
-      if(roles != null) {
7bd2447
-        for(String role : roles) {
7bd2447
-          userRealm.addUserToRole(username, role);
7bd2447
-        }
7bd2447
+      StringBuilder entry = new StringBuilder(password);
7bd2447
+      for(String role : roles) {
7bd2447
+        entry.append(",");
7bd2447
+        entry.append(role);
7bd2447
       }
7bd2447
+      p.put(username, entry.toString());
7bd2447
+    }
7bd2447
+    File propFile = new File("target/users.properties");
7bd2447
+    try (FileOutputStream in = new FileOutputStream(propFile)) {
7bd2447
+      p.store(in, null);
7bd2447
+    } catch(IOException ex) {
7bd2447
+      fail("Unable to create users properties file");
7bd2447
     }
7bd2447
 
7bd2447
-    SecurityHandler securityHandler = new SecurityHandler();
7bd2447
-    securityHandler.setUserRealm(userRealm);
7bd2447
-    securityHandler.setConstraintMappings(mappings.toArray(new ConstraintMapping[mappings.size()]));
7bd2447
+    HashLoginService userRealm = new HashLoginService("TestRealm", "target/users.properties");
7bd2447
+    server.addBean(userRealm);
7bd2447
+
7bd2447
+    ConstraintSecurityHandler securityHandler = new ConstraintSecurityHandler();
7bd2447
+    securityHandler.setAuthenticator(new BasicAuthenticator());
7bd2447
+    securityHandler.setLoginService(userRealm);
7bd2447
+    securityHandler.setConstraintMappings(mappings);
7bd2447
 
7bd2447
     return securityHandler;
7bd2447
   }
7bd2447
@@ -470,8 +496,8 @@ public class HttpServer {
7bd2447
 
7bd2447
   protected Handler newSleepHandler(final long millis) {
7bd2447
     return new AbstractHandler() {
7bd2447
-
7bd2447
-      public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) {
7bd2447
+      @Override
7bd2447
+      public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) {
7bd2447
         if(millis >= 0) {
7bd2447
           try {
7bd2447
             Thread.sleep(millis);
7bd2447
@@ -505,6 +531,8 @@ public class HttpServer {
7bd2447
 
7bd2447
     recordedRequests.clear();
7bd2447
 
7bd2447
+    server = new Server();
7bd2447
+
7bd2447
     List<Connector> connectors = new ArrayList<Connector>();
7bd2447
     if(httpPort >= 0) {
7bd2447
       connectors.add(newHttpConnector());
7bd2447
@@ -526,15 +554,20 @@ public class HttpServer {
7bd2447
     if(proxyUsername != null && proxyPassword != null) {
7bd2447
       handlerList.addHandler(newProxyHandler());
7bd2447
     }
7bd2447
+    SecurityHandler security = null;
7bd2447
     if(!securedRealms.isEmpty()) {
7bd2447
-      handlerList.addHandler(newSecurityHandler());
7bd2447
+      security = newSecurityHandler();
7bd2447
+      handlerList.addHandler(security);
7bd2447
     }
7bd2447
     if(!resourceDirs.isEmpty()) {
7bd2447
-      handlerList.addHandler(newResourceHandler());
7bd2447
+      if(security != null) {
7bd2447
+        security.setHandler(newResourceHandler());
7bd2447
+      } else {
7bd2447
+        handlerList.addHandler(newResourceHandler());
7bd2447
+      }
7bd2447
     }
7bd2447
     handlerList.addHandler(new DefaultHandler());
7bd2447
 
7bd2447
-    server = new Server(0);
7bd2447
     server.setHandler(handlerList);
7bd2447
     server.setConnectors(connectors.toArray(new Connector[connectors.size()]));
7bd2447
     server.start();
7bd2447
@@ -556,7 +589,7 @@ public class HttpServer {
7bd2447
       for(int i = 200; i > 0; i-- ) {
7bd2447
         badConnectors.clear();
7bd2447
         for(Connector connector : server.getConnectors()) {
7bd2447
-          if(connector.getLocalPort() < 0) {
7bd2447
+          if(((NetworkConnector) connector).getLocalPort() < 0) {
7bd2447
             badConnectors.add(connector);
7bd2447
           }
7bd2447
         }
7bd2447
@@ -620,8 +653,8 @@ public class HttpServer {
7bd2447
   }
7bd2447
 
7bd2447
   class ResHandler extends AbstractHandler {
7bd2447
-
7bd2447
-    public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch)
7bd2447
+    @Override
7bd2447
+    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
7bd2447
         throws IOException {
7bd2447
       String uri = request.getRequestURI();
7bd2447
 
7bd2447
@@ -631,14 +664,14 @@ public class HttpServer {
7bd2447
           File basedir = resourceDirs.get(contextRoot);
7bd2447
           File file = new File(basedir, path);
7bd2447
 
7bd2447
-          if(HttpMethods.HEAD.equals(request.getMethod())) {
7bd2447
+          if(HttpMethod.HEAD.equals(request.getMethod())) {
7bd2447
             if(file.exists())
7bd2447
               response.setStatus(HttpServletResponse.SC_OK);
7bd2447
             else
7bd2447
               response.setStatus(HttpServletResponse.SC_NOT_FOUND);
7bd2447
             ((Request) request).setHandled(true);
7bd2447
             return;
7bd2447
-          } else if(HttpMethods.PUT.equals(request.getMethod()) || HttpMethods.POST.equals(request.getMethod())) {
7bd2447
+          } else if(HttpMethod.PUT.equals(request.getMethod()) || HttpMethod.POST.equals(request.getMethod())) {
7bd2447
             file.getParentFile().mkdirs();
7bd2447
             FileOutputStream os = new FileOutputStream(file);
7bd2447
             try {
7bd2447
@@ -704,8 +737,8 @@ public class HttpServer {
7bd2447
   }
7bd2447
 
7bd2447
   class RecordingHandler extends AbstractHandler {
7bd2447
-
7bd2447
-    public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) {
7bd2447
+    @Override
7bd2447
+    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) {
7bd2447
       String uri = request.getRequestURI();
7bd2447
 
7bd2447
       for(String pattern : recordedPatterns) {