Update to latest jetty from platform.

Better to not ship stale jar files in jars folder.

Change-Id: I723f84173c79101f270731e9aadec9cdeafc9b59
Signed-off-by: Alexander Kurtakov <akurtako@redhat.com>
diff --git a/org.eclipse.m2e.tests.common/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.m2e.tests.common/.settings/org.eclipse.jdt.core.prefs
index cfb8223..452de3e 100644
--- a/org.eclipse.m2e.tests.common/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.m2e.tests.common/.settings/org.eclipse.jdt.core.prefs
@@ -17,6 +17,15 @@
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
@@ -26,6 +35,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
 org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -37,6 +47,7 @@
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -55,7 +66,9 @@
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
 org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
 org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
 org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
@@ -70,30 +83,51 @@
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
 org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.suppressWarningsNotFullyAnalysed=info
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
@@ -103,6 +137,7 @@
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.m2e.tests.common/META-INF/MANIFEST.MF b/org.eclipse.m2e.tests.common/META-INF/MANIFEST.MF
index a35e51a..4f5b6ce 100644
--- a/org.eclipse.m2e.tests.common/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.tests.common/META-INF/MANIFEST.MF
@@ -11,14 +11,18 @@
  org.eclipse.core.runtime,
  org.eclipse.jdt.core,
  org.eclipse.debug.core,
- org.eclipse.core.resources
+ org.eclipse.core.resources,
+ org.eclipse.jetty.server,
+ org.eclipse.jetty.util,
+ org.eclipse.jetty.http,
+ org.eclipse.jetty.security,
+ org.eclipse.jetty.io
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Bundle-ClassPath: .,
- jars/javax.servlet_2.5.0.v201103041518.jar,
- jars/org.mortbay.jetty.server_6.1.23.v201012071420.jar,
- jars/org.mortbay.jetty.util_6.1.23.v201012071420.jar
+Bundle-ClassPath: .
 Bundle-Vendor: %Bundle-Vendor
 MavenArtifact-GroupId: org.eclipse.m2e
 MavenArtifact-ArtifactId: org.eclipse.m2e.tests.common
 Export-Package: org.eclipse.m2e.tests.common;x-internal:=true
+Import-Package: javax.servlet;version="3.1.0",
+ javax.servlet.http;version="3.1.0"
diff --git a/org.eclipse.m2e.tests.common/build.properties b/org.eclipse.m2e.tests.common/build.properties
index 1a9040b..36b4965 100644
--- a/org.eclipse.m2e.tests.common/build.properties
+++ b/org.eclipse.m2e.tests.common/build.properties
@@ -15,6 +15,5 @@
 bin.includes = META-INF/,\
                .,\
                about.html,\
-               jars/,\
                OSGI-INF/
 src.includes = about.html
diff --git a/org.eclipse.m2e.tests.common/jars/javax.servlet_2.5.0.v201103041518.jar b/org.eclipse.m2e.tests.common/jars/javax.servlet_2.5.0.v201103041518.jar
deleted file mode 100644
index 681a068..0000000
--- a/org.eclipse.m2e.tests.common/jars/javax.servlet_2.5.0.v201103041518.jar
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.m2e.tests.common/jars/org.mortbay.jetty.server_6.1.23.v201012071420.jar b/org.eclipse.m2e.tests.common/jars/org.mortbay.jetty.server_6.1.23.v201012071420.jar
deleted file mode 100644
index 09bb891..0000000
--- a/org.eclipse.m2e.tests.common/jars/org.mortbay.jetty.server_6.1.23.v201012071420.jar
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.m2e.tests.common/jars/org.mortbay.jetty.util_6.1.23.v201012071420.jar b/org.eclipse.m2e.tests.common/jars/org.mortbay.jetty.util_6.1.23.v201012071420.jar
deleted file mode 100644
index 5a47bec..0000000
--- a/org.eclipse.m2e.tests.common/jars/org.mortbay.jetty.util_6.1.23.v201012071420.jar
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.m2e.tests.common/src/org/eclipse/m2e/tests/common/HttpServer.java b/org.eclipse.m2e.tests.common/src/org/eclipse/m2e/tests/common/HttpServer.java
index 96db486..05d5ac4 100644
--- a/org.eclipse.m2e.tests.common/src/org/eclipse/m2e/tests/common/HttpServer.java
+++ b/org.eclipse.m2e.tests.common/src/org/eclipse/m2e/tests/common/HttpServer.java
@@ -13,11 +13,14 @@
 
 package org.eclipse.m2e.tests.common;
 
+import static org.junit.Assert.fail;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Base64;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Enumeration;
@@ -25,28 +28,35 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 import java.util.TreeMap;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.mortbay.jetty.Connector;
-import org.mortbay.jetty.Handler;
-import org.mortbay.jetty.HttpMethods;
-import org.mortbay.jetty.Request;
-import org.mortbay.jetty.Server;
-import org.mortbay.jetty.handler.AbstractHandler;
-import org.mortbay.jetty.handler.DefaultHandler;
-import org.mortbay.jetty.handler.HandlerList;
-import org.mortbay.jetty.nio.SelectChannelConnector;
-import org.mortbay.jetty.security.B64Code;
-import org.mortbay.jetty.security.Constraint;
-import org.mortbay.jetty.security.ConstraintMapping;
-import org.mortbay.jetty.security.HashUserRealm;
-import org.mortbay.jetty.security.SecurityHandler;
-import org.mortbay.jetty.security.SslSocketConnector;
-import org.mortbay.util.IO;
-import org.mortbay.util.URIUtil;
+import org.eclipse.jetty.http.HttpMethod;
+import org.eclipse.jetty.http.HttpVersion;
+import org.eclipse.jetty.security.ConstraintMapping;
+import org.eclipse.jetty.security.ConstraintSecurityHandler;
+import org.eclipse.jetty.security.HashLoginService;
+import org.eclipse.jetty.security.SecurityHandler;
+import org.eclipse.jetty.security.authentication.BasicAuthenticator;
+import org.eclipse.jetty.server.Connector;
+import org.eclipse.jetty.server.Handler;
+import org.eclipse.jetty.server.HttpConfiguration;
+import org.eclipse.jetty.server.HttpConnectionFactory;
+import org.eclipse.jetty.server.NetworkConnector;
+import org.eclipse.jetty.server.Request;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.ServerConnector;
+import org.eclipse.jetty.server.SslConnectionFactory;
+import org.eclipse.jetty.server.handler.AbstractHandler;
+import org.eclipse.jetty.server.handler.DefaultHandler;
+import org.eclipse.jetty.server.handler.HandlerList;
+import org.eclipse.jetty.util.IO;
+import org.eclipse.jetty.util.URIUtil;
+import org.eclipse.jetty.util.security.Constraint;
+import org.eclipse.jetty.util.ssl.SslContextFactory;
 
 
 /**
@@ -103,24 +113,30 @@
   private String storePassword;
 
   protected Connector newHttpConnector() {
-    SelectChannelConnector connector = new SelectChannelConnector();
+    HttpConfiguration config = new HttpConfiguration();
+    config.setSecurePort(httpsPort);
+    ServerConnector connector = new ServerConnector(server, new HttpConnectionFactory(config));
     connector.setPort(httpPort);
     return connector;
   }
 
   protected Connector newHttpsConnector() {
-    SslSocketConnector connector = new SslSocketConnector();
-    connector.setPort(httpsPort);
-    connector.setKeystore(new File(keyStoreLocation).getAbsolutePath());
-    connector.setPassword(storePassword);
-    connector.setKeyPassword(keyStorePassword);
+    SslContextFactory.Server sslContextFactory = new SslContextFactory.Server();
+    sslContextFactory.setKeyManagerPassword(storePassword);
+    sslContextFactory.setKeyStorePath(new File(keyStoreLocation).getAbsolutePath());
+    sslContextFactory.setKeyStorePassword(keyStorePassword);
     if(trustStoreLocation != null && !trustStoreLocation.equals("")) {
-      connector.setTruststore(new File(trustStoreLocation).getAbsolutePath());
+      sslContextFactory.setTrustStorePath(new File(trustStoreLocation).getAbsolutePath());
     }
     if(trustStorePassword != null && !trustStoreLocation.equals("")) {
-      connector.setTrustPassword(trustStorePassword);
+      sslContextFactory.setTrustStorePassword(trustStorePassword);
     }
-    connector.setNeedClientAuth(needClientAuth);
+    sslContextFactory.setNeedClientAuth(needClientAuth);
+
+    ServerConnector connector = new ServerConnector(server,
+        new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString()));
+
+    connector.setPort(httpsPort);
     return connector;
   }
 
@@ -144,7 +160,7 @@
    */
   public int getHttpPort() {
     if(httpPort >= 0 && server != null && server.isRunning()) {
-      return server.getConnectors()[0].getLocalPort();
+      return ((NetworkConnector) server.getConnectors()[0]).getLocalPort();
     }
     return httpPort;
   }
@@ -178,7 +194,7 @@
    */
   public int getHttpsPort() {
     if(httpsPort >= 0 && server != null && server.isRunning()) {
-      return server.getConnectors()[(httpPort < 0) ? 0 : 1].getLocalPort();
+      return ((NetworkConnector) server.getConnectors()[(httpPort < 0) ? 0 : 1]).getLocalPort();
     }
     return httpsPort;
   }
@@ -262,20 +278,13 @@
 
   protected Handler newProxyHandler() {
     return new AbstractHandler() {
-      public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch)
-          throws IOException {
+      @Override
+      public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) {
         String auth = request.getHeader("Proxy-Authorization");
         if(auth != null) {
           auth = auth.substring(auth.indexOf(' ') + 1).trim();
-          auth = B64Code.decode(auth);
-        }
+          auth = new String(Base64.getDecoder().decode(auth));
 
-        if(!(proxyUsername + ':' + proxyPassword).equals(auth)) {
-          response.setStatus(HttpServletResponse.SC_PROXY_AUTHENTICATION_REQUIRED);
-          response.addHeader("Proxy-Authenticate", "Basic realm=\"Squid proxy-caching web server\"");
-          response.getWriter().println("Proxy authentication required");
-
-          ((Request) request).setHandled(true);
         }
       }
     };
@@ -295,8 +304,8 @@
 
   protected Handler newSslRedirectHandler() {
     return new AbstractHandler() {
-
-      public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) {
+      @Override
+      public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) {
         int httpsPort = getHttpsPort();
         if(!((Request) request).isHandled() && request.getServerPort() != httpsPort) {
           String url = "https://" + request.getServerName() + ":" + httpsPort + request.getRequestURI();
@@ -338,7 +347,7 @@
     return this;
   }
 
-  protected Handler newSecurityHandler() {
+  protected SecurityHandler newSecurityHandler() {
     List<ConstraintMapping> mappings = new ArrayList<ConstraintMapping>();
 
     for(String pathSpec : securedRealms.keySet()) {
@@ -356,22 +365,33 @@
       mappings.add(constraintMapping);
     }
 
-    HashUserRealm userRealm = new HashUserRealm("TestRealm");
+    Properties p = new Properties();
     for(String username : userPasswords.keySet()) {
       String password = userPasswords.get(username);
       String[] roles = userRoles.get(username);
 
-      userRealm.put(username, password);
-      if(roles != null) {
-        for(String role : roles) {
-          userRealm.addUserToRole(username, role);
-        }
+      StringBuilder entry = new StringBuilder(password);
+      for(String role : roles) {
+        entry.append(",");
+        entry.append(role);
       }
+      p.put(username, entry.toString());
     }
 
-    SecurityHandler securityHandler = new SecurityHandler();
-    securityHandler.setUserRealm(userRealm);
-    securityHandler.setConstraintMappings(mappings.toArray(new ConstraintMapping[mappings.size()]));
+    File propFile = new File("target/users.properties");
+    try (FileOutputStream in = new FileOutputStream(propFile)) {
+      p.store(in, null);
+    } catch(IOException ex) {
+      fail("Unable to create users properties file");
+    }
+
+    HashLoginService userRealm = new HashLoginService("TestRealm", "target/users.properties");
+    server.addBean(userRealm);
+
+    ConstraintSecurityHandler securityHandler = new ConstraintSecurityHandler();
+    securityHandler.setAuthenticator(new BasicAuthenticator());
+    securityHandler.setLoginService(userRealm);
+    securityHandler.setConstraintMappings(mappings);
 
     return securityHandler;
   }
@@ -472,8 +492,8 @@
 
   protected Handler newSleepHandler(final long millis) {
     return new AbstractHandler() {
-
-      public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) {
+      @Override
+      public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) {
         if(millis >= 0) {
           try {
             Thread.sleep(millis);
@@ -507,6 +527,8 @@
 
     recordedRequests.clear();
 
+    server = new Server();
+
     List<Connector> connectors = new ArrayList<Connector>();
     if(httpPort >= 0) {
       connectors.add(newHttpConnector());
@@ -528,15 +550,20 @@
     if(proxyUsername != null && proxyPassword != null) {
       handlerList.addHandler(newProxyHandler());
     }
+    SecurityHandler security = null;
     if(!securedRealms.isEmpty()) {
-      handlerList.addHandler(newSecurityHandler());
+      security = newSecurityHandler();
+      handlerList.addHandler(security);
     }
     if(!resourceDirs.isEmpty()) {
-      handlerList.addHandler(newResourceHandler());
+      if(security != null) {
+        security.setHandler(newResourceHandler());
+      } else {
+        handlerList.addHandler(newResourceHandler());
+      }
     }
     handlerList.addHandler(new DefaultHandler());
 
-    server = new Server(0);
     server.setHandler(handlerList);
     server.setConnectors(connectors.toArray(new Connector[connectors.size()]));
     server.start();
@@ -558,7 +585,7 @@
       for(int i = 200; i > 0; i-- ) {
         badConnectors.clear();
         for(Connector connector : server.getConnectors()) {
-          if(connector.getLocalPort() < 0) {
+          if(((NetworkConnector) connector).getLocalPort() < 0) {
             badConnectors.add(connector);
           }
         }
@@ -623,8 +650,11 @@
 
   class ResHandler extends AbstractHandler {
 
-    public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch)
+    @Override
+
+    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
         throws IOException {
+
       String uri = request.getRequestURI();
 
       for(String contextRoot : resourceDirs.keySet()) {
@@ -633,14 +663,14 @@
           File basedir = resourceDirs.get(contextRoot);
           File file = new File(basedir, path);
 
-          if(HttpMethods.HEAD.equals(request.getMethod())) {
+          if(HttpMethod.HEAD.equals(request.getMethod())) {
             if(file.exists())
               response.setStatus(HttpServletResponse.SC_OK);
             else
               response.setStatus(HttpServletResponse.SC_NOT_FOUND);
             ((Request) request).setHandled(true);
             return;
-          } else if(HttpMethods.PUT.equals(request.getMethod()) || HttpMethods.POST.equals(request.getMethod())) {
+          } else if(HttpMethod.PUT.equals(request.getMethod()) || HttpMethod.POST.equals(request.getMethod())) {
             file.getParentFile().mkdirs();
             FileOutputStream os = new FileOutputStream(file);
             try {
@@ -707,7 +737,8 @@
 
   class RecordingHandler extends AbstractHandler {
 
-    public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) {
+    @Override
+    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) {
       String uri = request.getRequestURI();
 
       for(String pattern : recordedPatterns) {