You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@knox.apache.org by km...@apache.org on 2016/03/03 23:30:13 UTC

[2/2] knox git commit: [KNOX-675] - Upgrade Knox's Jetty dependency to latest 9.x

[KNOX-675] - Upgrade Knox's Jetty dependency to latest 9.x


Project: http://git-wip-us.apache.org/repos/asf/knox/repo
Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/96e39622
Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/96e39622
Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/96e39622

Branch: refs/heads/master
Commit: 96e396223511980abefed2c6d47b1a0851247a5f
Parents: ea7efe7
Author: Kevin Minder <km...@apache.org>
Authored: Thu Mar 3 17:29:53 2016 -0500
Committer: Kevin Minder <km...@apache.org>
Committed: Thu Mar 3 17:29:53 2016 -0500

----------------------------------------------------------------------
 CHANGES                                         |   1 +
 .../ha/dispatch/DefaultHaDispatchTest.java      |   8 +-
 .../pom.xml                                     |   2 +-
 ...entityAsserterHttpServletRequestWrapper.java |   3 +-
 .../function/UsernameFunctionProcessorTest.java |  16 +-
 .../pom.xml                                     |   2 +-
 .../pom.xml                                     |   2 +-
 .../pom.xml                                     |   2 +-
 gateway-provider-jersey/pom.xml                 |   2 +-
 .../pom.xml                                     |   7 +-
 .../impl/ServiceRegistryFunctionsTest.java      |  20 +--
 gateway-provider-rewrite/pom.xml                |  14 +-
 .../rewrite/impl/UrlRewriteRequestStream.java   |   5 +-
 .../rewrite/impl/UrlRewriteResponseStream.java  |   4 +-
 .../UrlRewriteServletContextListenerTest.java   |  12 +-
 .../api/UrlRewriteServletFilterTest.java        |  81 +++++-----
 .../impl/FrontendFunctionProcessorTest.java     |  25 +--
 gateway-provider-security-authz-acls/pom.xml    |   6 -
 gateway-provider-security-hadoopauth/pom.xml    |   8 -
 gateway-provider-security-jwt/pom.xml           |   7 -
 gateway-provider-security-picketlink/pom.xml    |   8 -
 gateway-provider-security-preauth/pom.xml       |   7 -
 gateway-provider-security-shiro/pom.xml         |   8 -
 gateway-provider-security-webappsec/pom.xml     |   7 -
 gateway-server/pom.xml                          |  17 +-
 .../apache/hadoop/gateway/GatewayServer.java    | 106 ++++++++-----
 .../services/security/impl/JettySSLService.java |  29 ++--
 .../apache/hadoop/gateway/trace/TraceInput.java |   3 +-
 .../hadoop/gateway/trace/TraceOutput.java       |   3 +-
 .../hadoop/gateway/jetty/JettyHttpsTest.java    | 159 -------------------
 .../gateway/security/ShiroEmbeddedLdapTest.java |   2 +-
 .../hdfs/dispatch/WebHdfsHaDispatchTest.java    |   8 +-
 gateway-spi/pom.xml                             |   6 -
 .../gateway/services/security/SSLService.java   |   7 +-
 .../gateway/dispatch/DefaultDispatchTest.java   |   8 +-
 gateway-test-release/pom.xml                    |  20 +--
 gateway-test-utils/pom.xml                      |  13 +-
 .../org/apache/hadoop/test/log/NoOpLogger.java  |   4 +
 .../test/mock/MockHttpServletRequest.java       |  16 ++
 .../test/mock/MockHttpServletResponse.java      |   4 +
 .../org/apache/hadoop/test/mock/MockServer.java |   2 +-
 .../hadoop/test/mock/MockServletContext.java    |   5 +
 .../test/mock/MockServletInputStream.java       |   5 +-
 gateway-test/pom.xml                            |   2 +-
 gateway-util-common/pom.xml                     |   4 +
 .../SynchronousServletInputStreamAdapter.java   |  39 +++++
 .../SynchronousServletOutputStreamAdapter.java  |  34 ++++
 gateway-util-urltemplate/pom.xml                |   8 -
 pom.xml                                         |  22 +--
 49 files changed, 346 insertions(+), 437 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 0179aea..daed19b 100644
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,7 @@ Release Notes - Apache Knox - Version 0.9.0
     * [KNOX-674] - Expose Jetty's SSL cipher suite configuration via gateway-site.xml
 ** Improvement
     * [KNOX-677] - Upgrade to latest Groovy
+    * [KNOX-675] - Upgrade Knox's Jetty dependency to latest 9.x
 ** Bug
 
 ------------------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-ha/src/test/java/org/apache/hadoop/gateway/ha/dispatch/DefaultHaDispatchTest.java
----------------------------------------------------------------------
diff --git a/gateway-provider-ha/src/test/java/org/apache/hadoop/gateway/ha/dispatch/DefaultHaDispatchTest.java b/gateway-provider-ha/src/test/java/org/apache/hadoop/gateway/ha/dispatch/DefaultHaDispatchTest.java
index 3cf13c6..0436532 100644
--- a/gateway-provider-ha/src/test/java/org/apache/hadoop/gateway/ha/dispatch/DefaultHaDispatchTest.java
+++ b/gateway-provider-ha/src/test/java/org/apache/hadoop/gateway/ha/dispatch/DefaultHaDispatchTest.java
@@ -22,6 +22,7 @@ import org.apache.hadoop.gateway.ha.provider.HaProvider;
 import org.apache.hadoop.gateway.ha.provider.HaServletContextListener;
 import org.apache.hadoop.gateway.ha.provider.impl.DefaultHaProvider;
 import org.apache.hadoop.gateway.ha.provider.impl.HaDescriptorFactory;
+import org.apache.hadoop.gateway.servlet.SynchronousServletOutputStreamAdapter;
 import org.apache.http.client.methods.HttpRequestBase;
 import org.apache.http.client.methods.HttpUriRequest;
 import org.apache.http.impl.client.DefaultHttpClient;
@@ -33,7 +34,6 @@ import org.junit.Test;
 
 import javax.servlet.FilterConfig;
 import javax.servlet.ServletContext;
-import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -74,10 +74,10 @@ public class DefaultHaDispatchTest {
     EasyMock.expect(inboundRequest.getAttribute("dispatch.ha.failover.counter")).andReturn(new AtomicInteger(1)).once();
 
     HttpServletResponse outboundResponse = EasyMock.createNiceMock(HttpServletResponse.class);
-    EasyMock.expect(outboundResponse.getOutputStream()).andAnswer( new IAnswer<ServletOutputStream>() {
+    EasyMock.expect(outboundResponse.getOutputStream()).andAnswer( new IAnswer<SynchronousServletOutputStreamAdapter>() {
       @Override
-      public ServletOutputStream answer() throws Throwable {
-        return new ServletOutputStream() {
+      public SynchronousServletOutputStreamAdapter answer() throws Throwable {
+        return new SynchronousServletOutputStreamAdapter() {
           @Override
           public void write( int b ) throws IOException {
             throw new IOException( "unreachable-host" );

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-identity-assertion-common/pom.xml
----------------------------------------------------------------------
diff --git a/gateway-provider-identity-assertion-common/pom.xml b/gateway-provider-identity-assertion-common/pom.xml
index 4933d7b..e107e41 100644
--- a/gateway-provider-identity-assertion-common/pom.xml
+++ b/gateway-provider-identity-assertion-common/pom.xml
@@ -67,7 +67,7 @@
 
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
-            <artifactId>test-jetty-servlet</artifactId>
+            <artifactId>jetty-servlet</artifactId>
             <scope>test</scope>
         </dependency>
 

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-identity-assertion-common/src/main/java/org/apache/hadoop/gateway/identityasserter/common/filter/IdentityAsserterHttpServletRequestWrapper.java
----------------------------------------------------------------------
diff --git a/gateway-provider-identity-assertion-common/src/main/java/org/apache/hadoop/gateway/identityasserter/common/filter/IdentityAsserterHttpServletRequestWrapper.java b/gateway-provider-identity-assertion-common/src/main/java/org/apache/hadoop/gateway/identityasserter/common/filter/IdentityAsserterHttpServletRequestWrapper.java
index 257cadf..835a7a3 100644
--- a/gateway-provider-identity-assertion-common/src/main/java/org/apache/hadoop/gateway/identityasserter/common/filter/IdentityAsserterHttpServletRequestWrapper.java
+++ b/gateway-provider-identity-assertion-common/src/main/java/org/apache/hadoop/gateway/identityasserter/common/filter/IdentityAsserterHttpServletRequestWrapper.java
@@ -22,6 +22,7 @@ import org.apache.hadoop.gateway.SpiGatewayMessages;
 import org.apache.hadoop.gateway.config.GatewayConfig;
 import org.apache.hadoop.gateway.i18n.messages.MessagesFactory;
 import org.apache.hadoop.gateway.security.PrimaryPrincipal;
+import org.apache.hadoop.gateway.servlet.SynchronousServletInputStreamAdapter;
 import org.apache.hadoop.gateway.util.HttpUtils;
 
 import javax.servlet.ServletInputStream;
@@ -221,7 +222,7 @@ private static SpiGatewayMessages log = MessagesFactory.get( SpiGatewayMessages.
     return sb.toString();
   }
 
-  private class ServletInputStreamWrapper extends ServletInputStream {
+  private class ServletInputStreamWrapper extends SynchronousServletInputStreamAdapter {
 
     private InputStream stream;
 

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-identity-assertion-common/src/test/java/org/apache/hadoop/gateway/identityasserter/function/UsernameFunctionProcessorTest.java
----------------------------------------------------------------------
diff --git a/gateway-provider-identity-assertion-common/src/test/java/org/apache/hadoop/gateway/identityasserter/function/UsernameFunctionProcessorTest.java b/gateway-provider-identity-assertion-common/src/test/java/org/apache/hadoop/gateway/identityasserter/function/UsernameFunctionProcessorTest.java
index 3cc81a8..73920e7 100644
--- a/gateway-provider-identity-assertion-common/src/test/java/org/apache/hadoop/gateway/identityasserter/function/UsernameFunctionProcessorTest.java
+++ b/gateway-provider-identity-assertion-common/src/test/java/org/apache/hadoop/gateway/identityasserter/function/UsernameFunctionProcessorTest.java
@@ -30,8 +30,8 @@ import org.apache.hadoop.test.mock.MockServlet;
 import org.apache.http.auth.BasicUserPrincipal;
 import org.eclipse.jetty.servlet.FilterHolder;
 import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.testing.HttpTester;
-import org.eclipse.jetty.testing.ServletTester;
+import org.eclipse.jetty.http.HttpTester;
+import org.eclipse.jetty.servlet.ServletTester;
 import org.eclipse.jetty.util.ArrayQueue;
 import org.eclipse.jetty.util.log.Log;
 import org.hamcrest.core.Is;
@@ -68,8 +68,8 @@ import static org.junit.Assert.fail;
 public class UsernameFunctionProcessorTest {
 
   private ServletTester server;
-  private HttpTester request;
-  private HttpTester response;
+  private HttpTester.Request request;
+  private HttpTester.Response response;
   private ArrayQueue<MockInteraction> interactions;
   private MockInteraction interaction;
 
@@ -108,8 +108,8 @@ public class UsernameFunctionProcessorTest {
     server.start();
 
     interaction = new MockInteraction();
-    request = new HttpTester();
-    response = new HttpTester();
+    request = HttpTester.newRequest();
+    response = null;
   }
 
   @After
@@ -190,10 +190,10 @@ public class UsernameFunctionProcessorTest {
     request.setURI( "/test-input-path?test-query-input-name=test-query-input-value" );
     request.setVersion( "HTTP/1.1" );
     request.setHeader( "Host", "test-input-host:777" );
-    request.setContentType( "text/xml; charset=UTF-8" );
+    request.setHeader( "Content-Type", "text/xml; charset=UTF-8" );
     request.setContent( input );
 
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     // Test the results.
     assertThat( response.getStatus(), Is.is( 200 ) );

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-identity-assertion-concat/pom.xml
----------------------------------------------------------------------
diff --git a/gateway-provider-identity-assertion-concat/pom.xml b/gateway-provider-identity-assertion-concat/pom.xml
index ba867a8..f88ec42 100644
--- a/gateway-provider-identity-assertion-concat/pom.xml
+++ b/gateway-provider-identity-assertion-concat/pom.xml
@@ -63,7 +63,7 @@
 
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
-            <artifactId>test-jetty-servlet</artifactId>
+            <artifactId>jetty-servlet</artifactId>
             <scope>test</scope>
         </dependency>
 

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-identity-assertion-pseudo/pom.xml
----------------------------------------------------------------------
diff --git a/gateway-provider-identity-assertion-pseudo/pom.xml b/gateway-provider-identity-assertion-pseudo/pom.xml
index 64e9502..a2d78b9 100644
--- a/gateway-provider-identity-assertion-pseudo/pom.xml
+++ b/gateway-provider-identity-assertion-pseudo/pom.xml
@@ -63,7 +63,7 @@
 
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
-            <artifactId>test-jetty-servlet</artifactId>
+            <artifactId>jetty-servlet</artifactId>
             <scope>test</scope>
         </dependency>
 

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-identity-assertion-regex/pom.xml
----------------------------------------------------------------------
diff --git a/gateway-provider-identity-assertion-regex/pom.xml b/gateway-provider-identity-assertion-regex/pom.xml
index 3b183b2..34bce9b 100644
--- a/gateway-provider-identity-assertion-regex/pom.xml
+++ b/gateway-provider-identity-assertion-regex/pom.xml
@@ -63,7 +63,7 @@
 
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
-            <artifactId>test-jetty-servlet</artifactId>
+            <artifactId>jetty-servlet</artifactId>
             <scope>test</scope>
         </dependency>
 

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-jersey/pom.xml
----------------------------------------------------------------------
diff --git a/gateway-provider-jersey/pom.xml b/gateway-provider-jersey/pom.xml
index b6eccf7..6416687 100644
--- a/gateway-provider-jersey/pom.xml
+++ b/gateway-provider-jersey/pom.xml
@@ -65,7 +65,7 @@
 
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
-            <artifactId>test-jetty-servlet</artifactId>
+            <artifactId>jetty-servlet</artifactId>
             <scope>test</scope>
         </dependency>
 

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-rewrite-func-service-registry/pom.xml
----------------------------------------------------------------------
diff --git a/gateway-provider-rewrite-func-service-registry/pom.xml b/gateway-provider-rewrite-func-service-registry/pom.xml
index 52bbed5..262a1b1 100644
--- a/gateway-provider-rewrite-func-service-registry/pom.xml
+++ b/gateway-provider-rewrite-func-service-registry/pom.xml
@@ -75,12 +75,15 @@
             <artifactId>velocity</artifactId>
             <scope>test</scope>
         </dependency>
-
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
-            <artifactId>test-jetty-servlet</artifactId>
+            <artifactId>jetty-servlet</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+        </dependency>
 
         <dependency>
             <groupId>org.hamcrest</groupId>

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-rewrite-func-service-registry/src/test/java/org/apache/hadoop/gateway/svcregfunc/impl/ServiceRegistryFunctionsTest.java
----------------------------------------------------------------------
diff --git a/gateway-provider-rewrite-func-service-registry/src/test/java/org/apache/hadoop/gateway/svcregfunc/impl/ServiceRegistryFunctionsTest.java b/gateway-provider-rewrite-func-service-registry/src/test/java/org/apache/hadoop/gateway/svcregfunc/impl/ServiceRegistryFunctionsTest.java
index 4f57f0f..01b62d6 100644
--- a/gateway-provider-rewrite-func-service-registry/src/test/java/org/apache/hadoop/gateway/svcregfunc/impl/ServiceRegistryFunctionsTest.java
+++ b/gateway-provider-rewrite-func-service-registry/src/test/java/org/apache/hadoop/gateway/svcregfunc/impl/ServiceRegistryFunctionsTest.java
@@ -31,8 +31,8 @@ import org.apache.http.auth.BasicUserPrincipal;
 import org.easymock.EasyMock;
 import org.eclipse.jetty.servlet.FilterHolder;
 import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.testing.HttpTester;
-import org.eclipse.jetty.testing.ServletTester;
+import org.eclipse.jetty.http.HttpTester;
+import org.eclipse.jetty.servlet.ServletTester;
 import org.eclipse.jetty.util.ArrayQueue;
 import org.eclipse.jetty.util.log.Log;
 import org.hamcrest.core.Is;
@@ -57,8 +57,8 @@ import static org.hamcrest.MatcherAssert.assertThat;
 public class ServiceRegistryFunctionsTest {
 
   private ServletTester server;
-  private HttpTester request;
-  private HttpTester response;
+  private HttpTester.Request request;
+  private HttpTester.Response response;
   private ArrayQueue<MockInteraction> interactions;
   private MockInteraction interaction;
 
@@ -108,8 +108,8 @@ public class ServiceRegistryFunctionsTest {
     server.start();
 
     interaction = new MockInteraction();
-    request = new HttpTester();
-    response = new HttpTester();
+    request = HttpTester.newRequest();
+    response = null;
   }
 
   @Test
@@ -135,10 +135,10 @@ public class ServiceRegistryFunctionsTest {
     request.setURI( "/test-path" );
     request.setVersion( "HTTP/1.1" );
     request.setHeader( "Host", "test-host:42" );
-    request.setContentType( "text/xml; charset=UTF-8" );
+    request.setHeader( "Content-Type", "text/xml; charset=UTF-8" );
     request.setContent( input );
 
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     // Test the results.
     assertThat( response.getStatus(), Is.is( 200 ) );
@@ -167,10 +167,10 @@ public class ServiceRegistryFunctionsTest {
     request.setURI( "/test-path" );
     request.setVersion( "HTTP/1.1" );
     request.setHeader( "Host", "test-host:42" );
-    request.setContentType( "application/json; charset=UTF-8" );
+    request.setHeader( "Content-Type", "application/json; charset=UTF-8" );
     request.setContent( input );
 
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     // Test the results.
     assertThat( response.getStatus(), Is.is( 200 ) );

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-rewrite/pom.xml
----------------------------------------------------------------------
diff --git a/gateway-provider-rewrite/pom.xml b/gateway-provider-rewrite/pom.xml
index 243969e..3d18327 100644
--- a/gateway-provider-rewrite/pom.xml
+++ b/gateway-provider-rewrite/pom.xml
@@ -59,14 +59,6 @@
             <groupId>${gateway-group}</groupId>
             <artifactId>gateway-spi</artifactId>
         </dependency>
-
-        <!--
-        <dependency>
-            <groupId>org.eclipse.jetty.orbit</groupId>
-            <artifactId>javax.servlet</artifactId>
-        </dependency>
-        -->
-
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-digester3</artifactId>
@@ -104,9 +96,13 @@
 
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
-            <artifactId>test-jetty-servlet</artifactId>
+            <artifactId>jetty-servlet</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-util</artifactId>
+        </dependency>
 
         <dependency>
             <groupId>org.hamcrest</groupId>

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/UrlRewriteRequestStream.java
----------------------------------------------------------------------
diff --git a/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/UrlRewriteRequestStream.java b/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/UrlRewriteRequestStream.java
index 4fa3f26..1904d15 100644
--- a/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/UrlRewriteRequestStream.java
+++ b/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/UrlRewriteRequestStream.java
@@ -17,12 +17,13 @@
  */
 package org.apache.hadoop.gateway.filter.rewrite.impl;
 
-import javax.servlet.ServletInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.apache.hadoop.gateway.servlet.SynchronousServletInputStreamAdapter;
+
 //TODO: This needs to be coded much more efficiently!
-public class UrlRewriteRequestStream extends ServletInputStream {
+public class UrlRewriteRequestStream extends SynchronousServletInputStreamAdapter {
 
   private InputStream stream;
 

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/UrlRewriteResponseStream.java
----------------------------------------------------------------------
diff --git a/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/UrlRewriteResponseStream.java b/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/UrlRewriteResponseStream.java
index 28e4458..30d3cc4 100644
--- a/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/UrlRewriteResponseStream.java
+++ b/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/UrlRewriteResponseStream.java
@@ -18,15 +18,15 @@
 package org.apache.hadoop.gateway.filter.rewrite.impl;
 
 import org.apache.hadoop.gateway.filter.GatewayResponse;
+import org.apache.hadoop.gateway.servlet.SynchronousServletOutputStreamAdapter;
 
-import javax.servlet.ServletOutputStream;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
 //TODO: This needs to be coded much more efficiently!
-public class UrlRewriteResponseStream extends ServletOutputStream {
+public class UrlRewriteResponseStream extends SynchronousServletOutputStreamAdapter {
 
   private static int DEFAULT_BUFFER_SIZE = 1024;
 

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/api/UrlRewriteServletContextListenerTest.java
----------------------------------------------------------------------
diff --git a/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/api/UrlRewriteServletContextListenerTest.java b/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/api/UrlRewriteServletContextListenerTest.java
index 452a633..09584e8 100644
--- a/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/api/UrlRewriteServletContextListenerTest.java
+++ b/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/api/UrlRewriteServletContextListenerTest.java
@@ -21,8 +21,8 @@ import org.apache.hadoop.test.mock.MockInteraction;
 import org.apache.hadoop.test.mock.MockServlet;
 import org.eclipse.jetty.servlet.FilterHolder;
 import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.testing.HttpTester;
-import org.eclipse.jetty.testing.ServletTester;
+import org.eclipse.jetty.http.HttpTester;
+import org.eclipse.jetty.servlet.ServletTester;
 import org.eclipse.jetty.util.ArrayQueue;
 import org.junit.After;
 import org.junit.Before;
@@ -38,8 +38,8 @@ import static org.junit.Assert.fail;
 public class UrlRewriteServletContextListenerTest {
 
   private ServletTester server;
-  private HttpTester request;
-  private HttpTester response;
+  private HttpTester.Request request;
+  private HttpTester.Response response;
   private ArrayQueue<MockInteraction> interactions;
   private MockInteraction interaction;
 
@@ -73,8 +73,8 @@ public class UrlRewriteServletContextListenerTest {
     server.start();
 
     interaction = new MockInteraction();
-    request = new HttpTester();
-    response = new HttpTester();
+    request = HttpTester.newRequest();
+    response = null;
   }
 
   @After

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/api/UrlRewriteServletFilterTest.java
----------------------------------------------------------------------
diff --git a/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/api/UrlRewriteServletFilterTest.java b/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/api/UrlRewriteServletFilterTest.java
index d33582c..93bdac0 100644
--- a/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/api/UrlRewriteServletFilterTest.java
+++ b/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/api/UrlRewriteServletFilterTest.java
@@ -25,10 +25,11 @@ import org.apache.hadoop.test.log.NoOpLogger;
 import org.apache.hadoop.test.mock.MockInteraction;
 import org.apache.hadoop.test.mock.MockServlet;
 import org.apache.log4j.Appender;
+import org.eclipse.jetty.http.HttpHeader;
 import org.eclipse.jetty.servlet.FilterHolder;
 import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.testing.HttpTester;
-import org.eclipse.jetty.testing.ServletTester;
+import org.eclipse.jetty.http.HttpTester;
+import org.eclipse.jetty.servlet.ServletTester;
 import org.eclipse.jetty.util.ArrayQueue;
 import org.eclipse.jetty.util.log.Log;
 import org.junit.After;
@@ -62,8 +63,8 @@ import static org.xmlmatchers.transform.XmlConverters.the;
 public class UrlRewriteServletFilterTest {
 
   private ServletTester server;
-  private HttpTester request;
-  private HttpTester response;
+  private HttpTester.Request request;
+  private HttpTester.Response response;
   private ArrayQueue<MockInteraction> interactions;
   private MockInteraction interaction;
 
@@ -102,8 +103,8 @@ public class UrlRewriteServletFilterTest {
     server.start();
 
     interaction = new MockInteraction();
-    request = new HttpTester();
-    response = new HttpTester();
+    request = HttpTester.newRequest();
+    response = null;
   }
 
   @After
@@ -128,7 +129,7 @@ public class UrlRewriteServletFilterTest {
     request.setVersion( "HTTP/1.1" );
     request.setHeader( "Host", "mock-host:1" );
     // Execute the request.
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     // Test the results.
     assertThat( response.getStatus(), is( 200 ) );
@@ -153,7 +154,7 @@ public class UrlRewriteServletFilterTest {
     request.setHeader( "Host", "mock-host:1" );
     request.setHeader( "Location", "http://mock-host:1/test-input-path" );
     // Execute the request.
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     // Test the results.
     assertThat( response.getStatus(), is( 200 ) );
@@ -176,11 +177,11 @@ public class UrlRewriteServletFilterTest {
     request.setVersion( "HTTP/1.1" );
     request.setHeader( "Host", "mock-host:1" );
     // Execute the request.
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     // Test the results.
     assertThat( response.getStatus(), is( 201 ) );
-    assertThat( response.getHeader( "Location" ), is( "http://mock-host:1/test-output-path-1" ) );
+    assertThat( response.get( HttpHeader.LOCATION ), is( "http://mock-host:1/test-output-path-1" ) );
   }
 
   @Ignore( "Need to figure out how to handle cookies since domain and path are separate." )
@@ -200,10 +201,10 @@ public class UrlRewriteServletFilterTest {
     request.setURI( "/test-input-path" );
     request.setVersion( "HTTP/1.1" );
     request.setHeader( "Host", "mock-host:1" );
-    request.addHeader( "Cookie", "cookie-name=cookie-value; Domain=docs.foo.com; Path=/accounts; Expires=Wed, 13-Jan-2021 22:23:01 GMT; Secure; HttpOnly" );
+    request.setHeader( "Cookie", "cookie-name=cookie-value; Domain=docs.foo.com; Path=/accounts; Expires=Wed, 13-Jan-2021 22:23:01 GMT; Secure; HttpOnly" );
 
     // Execute the request.
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     // Test the results.
     assertThat( response.getStatus(), is( 201 ) );
@@ -229,11 +230,11 @@ public class UrlRewriteServletFilterTest {
     request.setHeader( "Host", "mock-host:1" );
 
     // Execute the request.
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     // Test the results.
     assertThat( response.getStatus(), is( 200 ) );
-    assertThat( response.getHeader( "Set-Cookie" ), is( "TODO" ) );
+    assertThat( response.get( HttpHeader.SET_COOKIE ), is( "TODO" ) );
     fail( "TODO" );
   }
 
@@ -256,11 +257,11 @@ public class UrlRewriteServletFilterTest {
     request.setURI( "/test-input-path" );
     request.setVersion( "HTTP/1.1" );
     request.setHeader( "Host", "mock-host:1" );
-    request.setContentType( "application/json; charset=UTF-8" );
+    request.setHeader( "Content-Type", "application/json; charset=UTF-8" );
     request.setContent( inputJson );
 
     // Execute the request.
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     // Test the results.
     assertThat( response.getStatus(), is( 200 ) );
@@ -288,11 +289,11 @@ public class UrlRewriteServletFilterTest {
     request.setURI( "/test-input-path" );
     request.setVersion( "HTTP/1.1" );
     request.setHeader( "Host", "mock-host:1" );
-    request.setContentType( "application/xml; charset=UTF-8" );
+    request.setHeader( "Content-Type", "application/xml; charset=UTF-8" );
     request.setContent( input );
 
     // Execute the request.
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     // Test the results.
     assertThat( response.getStatus(), is( 200 ) );
@@ -321,7 +322,7 @@ public class UrlRewriteServletFilterTest {
     request.setHeader( "Host", "mock-host:1" );
 
     // Execute the request.
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     // Test the results.
     assertThat( response.getStatus(), is( 200 ) );
@@ -347,11 +348,11 @@ public class UrlRewriteServletFilterTest {
     request.setURI( "/test-input-path" );
     request.setVersion( "HTTP/1.1" );
     request.setHeader( "Host", "mock-host:1" );
-    request.setContentType( "application/html; charset=UTF-8" );
+    request.setHeader( "Content-Type", "application/html; charset=UTF-8" );
     request.setContent( input );
 
     // Execute the request.
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     // Test the results.
     assertThat( response.getStatus(), is( 200 ) );
@@ -376,11 +377,11 @@ public class UrlRewriteServletFilterTest {
     request.setURI( "/test-input-path" );
     request.setVersion( "HTTP/1.1" );
     request.setHeader( "Host", "mock-host:1" );
-    request.setContentType( "application/x-www-form-urlencoded; charset=UTF-8" );
+    request.setHeader( "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8" );
     request.setContent( input );
 
     // Execute the request.
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     // Test the results.
     assertThat( response.getStatus(), is( 200 ) );
@@ -409,11 +410,11 @@ public class UrlRewriteServletFilterTest {
     request.setURI( "/test-input-path" );
     request.setVersion( "HTTP/1.1" );
     request.setHeader( "Host", "mock-host:42" );
-    request.setContentType( "text/xml; charset=UTF-8" );
+    request.setHeader( "Content-Type", "text/xml; charset=UTF-8" );
     request.setContent( input );
 
     // Execute the request.
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     // Test the results.
     assertThat( response.getStatus(), is( 200 ) );
@@ -444,11 +445,11 @@ public class UrlRewriteServletFilterTest {
     request.setVersion( "HTTP/1.1" );
     request.setHeader( "Host", "mock-host:42" );
     request.setHeader( "Location", "http://mock-host:42/test-input-path-1" );
-    request.setContentType( "text/xml; charset=UTF-8" );
+    request.setHeader( "Content-Type", "text/xml; charset=UTF-8" );
     request.setContent( input );
 
     // Execute the request.
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     // Test the results.
     assertThat( response.getStatus(), is( 200 ) );
@@ -484,11 +485,11 @@ public class UrlRewriteServletFilterTest {
     request.setURI( "/test-input-path" );
     request.setVersion( "HTTP/1.1" );
     request.setHeader( "Host", "mock-host:42" );
-    request.setContentType( "application/json; charset=UTF-8" );
+    request.setHeader( "Content-Type", "application/json; charset=UTF-8" );
     request.setContent( inputJson );
 
     // Execute the request.
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     // Test the results.
     assertThat( response.getStatus(), is( 200 ) );
@@ -517,11 +518,11 @@ public class UrlRewriteServletFilterTest {
     request.setURI( "/test-input-path" );
     request.setVersion( "HTTP/1.1" );
     request.setHeader( "Host", "mock-host:42" );
-    request.setContentType( "text/xml; charset=UTF-8" );
+    request.setHeader( "Content-Type", "text/xml; charset=UTF-8" );
     request.setContent( input );
 
     // Execute the request.
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     // Test the results.
     assertThat( response.getStatus(), is( 200 ) );
@@ -553,11 +554,11 @@ public class UrlRewriteServletFilterTest {
       request.setURI( "/test-input-path" );
       request.setVersion( "HTTP/1.1" );
       request.setHeader( "Host", "mock-host:42" );
-      request.setContentType( "text/xml; charset=UTF-8" );
+      request.setHeader( "Content-Type", "text/xml; charset=UTF-8" );
       request.setContent( input );
 
       // Execute the request.
-      response.parse( server.getResponses( request.generate() ) );
+      response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
       // Test the results.
       assertThat( response.getStatus(), is( 500 ) );
@@ -588,11 +589,11 @@ public class UrlRewriteServletFilterTest {
     request.setURI( "/test-input-path" );
     request.setVersion( "HTTP/1.1" );
     request.setHeader( "Host", "mock-host:1" );
-    request.setContentType( "application/x-www-form-urlencoded; charset=UTF-8" );
+    request.setHeader( "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8" );
     request.setContent( input );
 
     // Execute the request.
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     // Test the results.
     assertThat( response.getStatus(), is( 200 ) );
@@ -622,11 +623,11 @@ public class UrlRewriteServletFilterTest {
     request.setHeader( "Host", "mock-host:42" );
 
     // Execute the request.
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     // Test the results.
     assertThat( response.getStatus(), is( 307 ) );
-    assertThat( response.getHeader( "Location" ), is( "http://mock-host:42/test-output-path-2" ) );
+    assertThat( response.get( HttpHeader.LOCATION ), is( "http://mock-host:42/test-output-path-2" ) );
 
     String actual = response.getContent();
 
@@ -663,11 +664,11 @@ public class UrlRewriteServletFilterTest {
     request.setURI( "/test-input-path" );
     request.setVersion( "HTTP/1.1" );
     request.setHeader( "Host", "mock-host:42" );
-    request.setContentType( "application/json; charset=UTF-8" );
+    request.setHeader( "Content-Type", "application/json; charset=UTF-8" );
     request.setContent( responseJson );
 
     // Execute the request.
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     assertThat( response.getStatus(), is( 200 ) );
     JsonAssert.with( response.getContent() ).assertThat( "$.url", is( "http://mock-host:42/test-output-path-2" ) );
@@ -696,7 +697,7 @@ public class UrlRewriteServletFilterTest {
     request.setHeader( "Host", "mock-host:42" );
 
     // Execute the request.
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     // Test the results.
     assertThat( response.getStatus(), is( 200 ) );

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/impl/FrontendFunctionProcessorTest.java
----------------------------------------------------------------------
diff --git a/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/impl/FrontendFunctionProcessorTest.java b/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/impl/FrontendFunctionProcessorTest.java
index 014ce4f..daf4101 100644
--- a/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/impl/FrontendFunctionProcessorTest.java
+++ b/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/impl/FrontendFunctionProcessorTest.java
@@ -35,8 +35,8 @@ import org.apache.http.auth.BasicUserPrincipal;
 import org.easymock.EasyMock;
 import org.eclipse.jetty.servlet.FilterHolder;
 import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.testing.HttpTester;
-import org.eclipse.jetty.testing.ServletTester;
+import org.eclipse.jetty.http.HttpTester;
+import org.eclipse.jetty.servlet.ServletTester;
 import org.eclipse.jetty.util.ArrayQueue;
 import org.eclipse.jetty.util.Attributes;
 import org.eclipse.jetty.util.AttributesMap;
@@ -67,14 +67,15 @@ import java.util.ServiceLoader;
 
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.anyOf;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.fail;
 
 public class FrontendFunctionProcessorTest {
 
   private ServletTester server;
-  private HttpTester request;
-  private HttpTester response;
+  private HttpTester.Request request;
+  private HttpTester.Response response;
   private ArrayQueue<MockInteraction> interactions;
   private MockInteraction interaction;
 
@@ -165,8 +166,8 @@ public class FrontendFunctionProcessorTest {
     server.start();
 
     interaction = new MockInteraction();
-    request = new HttpTester();
-    response = new HttpTester();
+    request = HttpTester.newRequest();
+    response = null;
   }
 
   @Test
@@ -191,19 +192,19 @@ public class FrontendFunctionProcessorTest {
     request.setVersion( "HTTP/1.1" );
     request.setHeader( "Host", "test-host:42" );
 
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     assertThat( response.getStatus(), Is.is( 200 ) );
 
     String json = response.getContent();
 
     // Note: The Jetty ServletTester/HttpTester doesn't return very good values.
-    JsonAssert.with( json ).assertThat( "$.url", is( "http://localhost:0" ) );
+    JsonAssert.with( json ).assertThat( "$.url", anyOf( is( "http://localhost:0" ), is( "http://0.0.0.0:0" ) ) );
     JsonAssert.with( json ).assertThat( "$.scheme", is( "http" ) );
-    JsonAssert.with( json ).assertThat( "$.host", is( "localhost" ) );
+    JsonAssert.with( json ).assertThat( "$.host", anyOf( is( "localhost" ), is( "0.0.0.0" ) ) );
     JsonAssert.with( json ).assertThat( "$.port", is( "0" ) );
-    JsonAssert.with( json ).assertThat( "$.addr", is( "localhost:0" ) );
-    JsonAssert.with( json ).assertThat( "$.address", is( "localhost:0" ) );
+    JsonAssert.with( json ).assertThat( "$.addr", anyOf( is( "localhost:0" ), is( "0.0.0.0:0" ) ) );
+    JsonAssert.with( json ).assertThat( "$.address", anyOf( is( "localhost:0" ), is( "0.0.0.0:0" ) ) );
     JsonAssert.with( json ).assertThat( "$.path", is( "" ) );
   }
 
@@ -236,7 +237,7 @@ public class FrontendFunctionProcessorTest {
     request.setVersion( "HTTP/1.1" );
     request.setHeader( "Host", "test-host:42" );
 
-    response.parse( server.getResponses( request.generate() ) );
+    response = HttpTester.parseResponse( server.getResponses( request.generate() ) );
 
     assertThat( response.getStatus(), Is.is( 200 ) );
 

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-security-authz-acls/pom.xml
----------------------------------------------------------------------
diff --git a/gateway-provider-security-authz-acls/pom.xml b/gateway-provider-security-authz-acls/pom.xml
index 1564144..c99178a 100644
--- a/gateway-provider-security-authz-acls/pom.xml
+++ b/gateway-provider-security-authz-acls/pom.xml
@@ -35,12 +35,6 @@
             <groupId>${gateway-group}</groupId>
             <artifactId>gateway-util-common</artifactId>
         </dependency>
-        <!--
-        <dependency>
-            <groupId>org.eclipse.jetty.orbit</groupId>
-            <artifactId>javax.servlet</artifactId>
-        </dependency>
-        -->
         <dependency>
             <groupId>commons-io</groupId>
             <artifactId>commons-io</artifactId>

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-security-hadoopauth/pom.xml
----------------------------------------------------------------------
diff --git a/gateway-provider-security-hadoopauth/pom.xml b/gateway-provider-security-hadoopauth/pom.xml
index 8240dde..deeeb55 100755
--- a/gateway-provider-security-hadoopauth/pom.xml
+++ b/gateway-provider-security-hadoopauth/pom.xml
@@ -44,14 +44,6 @@
             <groupId>${gateway-group}</groupId>
             <artifactId>gateway-util-common</artifactId>
         </dependency>
-
-        <!--
-        <dependency>
-            <groupId>org.eclipse.jetty.orbit</groupId>
-            <artifactId>javax.servlet</artifactId>
-        </dependency>
-        -->
-
         <dependency>
             <groupId>org.apache.hadoop</groupId>
             <artifactId>hadoop-auth</artifactId>

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-security-jwt/pom.xml
----------------------------------------------------------------------
diff --git a/gateway-provider-security-jwt/pom.xml b/gateway-provider-security-jwt/pom.xml
index ef0727e..b87c003 100644
--- a/gateway-provider-security-jwt/pom.xml
+++ b/gateway-provider-security-jwt/pom.xml
@@ -46,13 +46,6 @@
             <artifactId>gateway-util-common</artifactId>
         </dependency>
 
-        <!--
-        <dependency>
-            <groupId>org.eclipse.jetty.orbit</groupId>
-            <artifactId>javax.servlet</artifactId>
-        </dependency>
-        -->
-
         <dependency>
             <groupId>commons-io</groupId>
             <artifactId>commons-io</artifactId>

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-security-picketlink/pom.xml
----------------------------------------------------------------------
diff --git a/gateway-provider-security-picketlink/pom.xml b/gateway-provider-security-picketlink/pom.xml
index b20e93c..27d168b 100644
--- a/gateway-provider-security-picketlink/pom.xml
+++ b/gateway-provider-security-picketlink/pom.xml
@@ -44,14 +44,6 @@
             <groupId>${gateway-group}</groupId>
             <artifactId>gateway-util-common</artifactId>
         </dependency>
-
-        <!--
-        <dependency>
-            <groupId>org.eclipse.jetty.orbit</groupId>
-            <artifactId>javax.servlet</artifactId>
-        </dependency>
-        -->
-        
         <dependency>
             <groupId>org.picketlink</groupId>
             <artifactId>picketlink-federation</artifactId>

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-security-preauth/pom.xml
----------------------------------------------------------------------
diff --git a/gateway-provider-security-preauth/pom.xml b/gateway-provider-security-preauth/pom.xml
index cabe506..a0924e7 100644
--- a/gateway-provider-security-preauth/pom.xml
+++ b/gateway-provider-security-preauth/pom.xml
@@ -45,13 +45,6 @@
             <artifactId>gateway-util-common</artifactId>
         </dependency>
 
-        <!--
-        <dependency>
-            <groupId>org.eclipse.jetty.orbit</groupId>
-            <artifactId>javax.servlet</artifactId>
-        </dependency>
-        -->
-
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-security-shiro/pom.xml
----------------------------------------------------------------------
diff --git a/gateway-provider-security-shiro/pom.xml b/gateway-provider-security-shiro/pom.xml
index 763e9ce..a94bbfc 100644
--- a/gateway-provider-security-shiro/pom.xml
+++ b/gateway-provider-security-shiro/pom.xml
@@ -54,14 +54,6 @@
             <groupId>org.jboss.shrinkwrap.descriptors</groupId>
             <artifactId>shrinkwrap-descriptors-api-javaee</artifactId>
         </dependency>
-
-        <!--
-        <dependency>
-            <groupId>org.eclipse.jetty.orbit</groupId>
-            <artifactId>javax.servlet</artifactId>
-        </dependency>
-        -->
-
         <dependency>
             <groupId>org.apache.shiro</groupId>
             <artifactId>shiro-web</artifactId>

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-provider-security-webappsec/pom.xml
----------------------------------------------------------------------
diff --git a/gateway-provider-security-webappsec/pom.xml b/gateway-provider-security-webappsec/pom.xml
index 67c4b2d..db8aa3b 100644
--- a/gateway-provider-security-webappsec/pom.xml
+++ b/gateway-provider-security-webappsec/pom.xml
@@ -50,13 +50,6 @@
             <artifactId>cors-filter</artifactId>
         </dependency>
 
-        <!--
-        <dependency>
-            <groupId>org.eclipse.jetty.orbit</groupId>
-            <artifactId>javax.servlet</artifactId>
-        </dependency>
-        -->
-
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-server/pom.xml
----------------------------------------------------------------------
diff --git a/gateway-server/pom.xml b/gateway-server/pom.xml
index b3df024..20f22ae 100644
--- a/gateway-server/pom.xml
+++ b/gateway-server/pom.xml
@@ -58,19 +58,6 @@
 
     <dependencies>
 
-        <!--
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>javax.servlet-api</artifactId>
-        </dependency>
-        -->
-        <!--
-        <dependency>
-            <groupId>org.eclipse.jetty.orbit</groupId>
-            <artifactId>javax.servlet</artifactId>
-        </dependency>
-        -->
-
         <dependency>
             <groupId>org.eclipse.persistence</groupId>
             <artifactId>eclipselink</artifactId>
@@ -123,6 +110,10 @@
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-webapp</artifactId>
         </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+        </dependency>
         <!--
         <dependency>
             <groupId>org.eclipse.jetty</groupId>

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-server/src/main/java/org/apache/hadoop/gateway/GatewayServer.java
----------------------------------------------------------------------
diff --git a/gateway-server/src/main/java/org/apache/hadoop/gateway/GatewayServer.java b/gateway-server/src/main/java/org/apache/hadoop/gateway/GatewayServer.java
index a6943b6..12ab201 100644
--- a/gateway-server/src/main/java/org/apache/hadoop/gateway/GatewayServer.java
+++ b/gateway-server/src/main/java/org/apache/hadoop/gateway/GatewayServer.java
@@ -25,6 +25,9 @@ import java.net.InetSocketAddress;
 import java.net.ServerSocket;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -75,11 +78,16 @@ import org.apache.hadoop.gateway.util.XmlUtils;
 import org.apache.log4j.PropertyConfigurator;
 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.SecureRequestCustomizer;
 import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.server.handler.ContextHandlerCollection;
 import org.eclipse.jetty.server.handler.HandlerCollection;
 import org.eclipse.jetty.server.handler.RequestLogHandler;
-import org.eclipse.jetty.server.nio.SelectChannelConnector;
+import org.eclipse.jetty.util.ssl.SslContextFactory;
 import org.eclipse.jetty.util.thread.QueuedThreadPool;
 import org.eclipse.jetty.webapp.WebAppContext;
 import org.jboss.shrinkwrap.api.exporter.ExplodedExporter;
@@ -101,7 +109,6 @@ public class GatewayServer {
   private static Properties buildProperties;
 
   private Server jetty;
-  private ErrorHandler errorHandler;
   private GatewayConfig config;
   private ContextHandlerCollection contexts;
   private TopologyService monitor;
@@ -281,7 +288,7 @@ public class GatewayServer {
       services.start();
       DeploymentFactory.setGatewayServices(services);
       server.start();
-      log.startedGateway( server.jetty.getConnectors()[ 0 ].getLocalPort() );
+      log.startedGateway( server.jetty.getURI().getPort() );
       return server;
     }
   }
@@ -295,26 +302,33 @@ public class GatewayServer {
       this.listener = new InternalTopologyListener();
   }
 
-  private static Connector createConnector( final GatewayConfig config ) throws IOException {
-    Connector connector;
+  private static Connector createConnector( final Server server, final GatewayConfig config ) throws IOException, CertificateException, NoSuchAlgorithmException, KeyStoreException {
+    ServerConnector connector;
 
     // Determine the socket address and check availability.
     InetSocketAddress address = config.getGatewayAddress();
     checkAddressAvailability( address );
 
+    HttpConfiguration httpConfig = new HttpConfiguration();
+    httpConfig.setRequestHeaderSize( config.getHttpServerRequestHeaderBuffer() );
+    //httpConfig.setRequestBufferSize( config.getHttpServerRequestBuffer() );
+    httpConfig.setResponseHeaderSize( config.getHttpServerResponseHeaderBuffer() );
+    httpConfig.setOutputBufferSize( config.getHttpServerResponseBuffer() );
+
     if (config.isSSLEnabled()) {
+      HttpConfiguration httpsConfig = new HttpConfiguration( httpConfig );
+      httpsConfig.setSecureScheme( "https" );
+      httpsConfig.setSecurePort( address.getPort() );
+      httpsConfig.addCustomizer( new SecureRequestCustomizer() );
       SSLService ssl = services.getService("SSLService");
       String keystoreFileName = config.getGatewaySecurityDir() + File.separatorChar + "keystores" + File.separatorChar + "gateway.jks";
-      connector = (Connector) ssl.buildSSlConnector(keystoreFileName);
+      SslContextFactory sslContextFactory = (SslContextFactory)ssl.buildSslContextFactory( keystoreFileName );
+      connector = new ServerConnector( server, sslContextFactory, new HttpConnectionFactory( httpsConfig ) );
     } else {
-      connector = new SelectChannelConnector();
+      connector = new ServerConnector( server );
     }
     connector.setHost( address.getHostName() );
     connector.setPort( address.getPort() );
-    connector.setRequestHeaderSize( config.getHttpServerRequestHeaderBuffer() );
-    connector.setRequestBufferSize( config.getHttpServerRequestBuffer() );
-    connector.setResponseHeaderSize( config.getHttpServerResponseHeaderBuffer() );
-    connector.setResponseBufferSize( config.getHttpServerResponseBuffer() );
 
     return connector;
   }
@@ -341,20 +355,15 @@ public class GatewayServer {
   }
 
   private synchronized void start() throws Exception {
-    errorHandler = new ErrorHandler();
-    errorHandler.setShowStacks( false );
-    errorHandler.setTracedBodyFilter( System.getProperty( "org.apache.knox.gateway.trace.body.status.filter" ) );
-
     // Create the global context handler.
     contexts = new ContextHandlerCollection();
      // A map to keep track of current deployments by cluster name.
     deployments = new ConcurrentHashMap<String, WebAppContext>();
 
     // Start Jetty.
-    jetty = new Server();
-    jetty.addConnector( createConnector( config ) );
+    jetty = new Server( new QueuedThreadPool( config.getThreadPoolMax() ) );
+    jetty.addConnector( createConnector( jetty, config ) );
     jetty.setHandler( createHandlers( config, services, contexts ) );
-    jetty.setThreadPool( new QueuedThreadPool( config.getThreadPoolMax() ) );
 
     // Load the current topologies.
     File topologiesDir = calculateAbsoluteTopologiesDir();
@@ -387,10 +396,14 @@ public class GatewayServer {
     log.stoppedGateway();
   }
 
+  public URI getURI() {
+    return jetty.getURI();
+  }
+
   public InetSocketAddress[] getAddresses() {
     InetSocketAddress[] addresses = new InetSocketAddress[ jetty.getConnectors().length ];
     for( int i=0, n=addresses.length; i<n; i++ ) {
-      Connector connector = jetty.getConnectors()[ i ];
+      NetworkConnector connector = (NetworkConnector)jetty.getConnectors()[ i ];
       String host = connector.getHost();
       if( host == null ) {
         addresses[ i ] = new InetSocketAddress( connector.getLocalPort() );
@@ -401,6 +414,13 @@ public class GatewayServer {
     return addresses;
   }
 
+  private ErrorHandler createErrorHandler() {
+    ErrorHandler errorHandler = new ErrorHandler();
+    errorHandler.setShowStacks( false );
+    errorHandler.setTracedBodyFilter( System.getProperty( "org.apache.knox.gateway.trace.body.status.filter" ) );
+    return errorHandler;
+  }
+
   private WebAppContext createWebAppContext( Topology topology, File warFile, String warPath ) throws IOException, ZipException, TransformerException, SAXException, ParserConfigurationException {
     String topoName = topology.getName();
     WebAppContext context = new WebAppContext();
@@ -411,8 +431,8 @@ public class GatewayServer {
     context.setAttribute( GatewayServices.GATEWAY_CLUSTER_ATTRIBUTE, topoName );
     context.setAttribute( "org.apache.knox.gateway.frontend.uri", getFrontendUri( context, config ) );
     context.setAttribute( GatewayConfig.GATEWAY_CONFIG_ATTRIBUTE, config );
-    context.setTempDirectory( warFile );
-    context.setErrorHandler( errorHandler );
+    context.setTempDirectory( FileUtils.getFile( warFile, "META-INF", "temp" ) );
+    context.setErrorHandler( createErrorHandler() );
     return context;
   }
 
@@ -481,10 +501,11 @@ public class GatewayServer {
     if( !appDir.exists() ) {
       throw new DeploymentException( "Application archive does not exist: " + appDir.getAbsolutePath() );
     }
-    File warFile = new File( topoDir, Urls.encode( "/" + Urls.trimLeadingAndTrailingSlash( url ) ) );
-    File webInfDir = new File( warFile, "WEB-INF" );
-    explodeWar( appDir, warFile );
+    File warDir = new File( topoDir, Urls.encode( "/" + Urls.trimLeadingAndTrailingSlash( url ) ) );
+    File webInfDir = new File( warDir, "WEB-INF" );
+    explodeWar( appDir, warDir );
     mergeWebXmlOverrides( webInfDir );
+    createArchiveTempDir( warDir );
   }
 
   private synchronized void internalActivateTopology( Topology topology, File topoDir ) throws IOException, ZipException, ParserConfigurationException, TransformerException, SAXException {
@@ -499,20 +520,20 @@ public class GatewayServer {
 
   private synchronized void internalActivateArchive( Topology topology, File warDir ) throws IOException, ZipException, ParserConfigurationException, TransformerException, SAXException {
     log.activatingTopologyArchive( topology.getName(), warDir.getName() );
-    WebAppContext newContext = createWebAppContext( topology, warDir, Urls.decode( warDir.getName() ) );
-    WebAppContext oldContext = deployments.get( newContext.getContextPath() );
-    deployments.put( newContext.getContextPath(), newContext );
-    if( oldContext != null ) {
-      contexts.removeHandler( oldContext );
-    }
-    contexts.addHandler( newContext );
-    if( contexts.isRunning() ) {
-      try {
-        newContext.start();
-      } catch( Exception e ) {
-        auditor.audit( Action.DEPLOY, topology.getName(), ResourceType.TOPOLOGY, ActionOutcome.FAILURE );
-        log.failedToDeployTopology( topology.getName(), e );
+    try {
+      WebAppContext newContext = createWebAppContext( topology, warDir, Urls.decode( warDir.getName() ) );
+      WebAppContext oldContext = deployments.get( newContext.getContextPath() );
+      deployments.put( newContext.getContextPath(), newContext );
+      if( oldContext != null ) {
+        contexts.removeHandler( oldContext );
       }
+      contexts.addHandler( newContext );
+      if( contexts.isRunning() && !newContext.isRunning() ) {
+          newContext.start();
+      }
+    } catch( Exception e ) {
+      auditor.audit( Action.DEPLOY, topology.getName(), ResourceType.TOPOLOGY, ActionOutcome.FAILURE );
+      log.failedToDeployTopology( topology.getName(), e );
     }
   }
 
@@ -632,6 +653,17 @@ public class GatewayServer {
 
   }
 
+  private File createArchiveTempDir( File warDir ) {
+    File tempDir = FileUtils.getFile( warDir, "META-INF", "temp" );
+    if( !tempDir.exists() ) {
+      tempDir.mkdirs();
+      if( !tempDir.exists() ) {
+        throw new DeploymentException( "Failed to create archive temporary directory: " + tempDir.getAbsolutePath() );
+      }
+    }
+    return tempDir;
+  }
+
   private static File calculateAbsoluteTopologiesDir( GatewayConfig config ) {
     File topoDir = new File( config.getGatewayTopologyDir() );
     topoDir = topoDir.getAbsoluteFile();

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-server/src/main/java/org/apache/hadoop/gateway/services/security/impl/JettySSLService.java
----------------------------------------------------------------------
diff --git a/gateway-server/src/main/java/org/apache/hadoop/gateway/services/security/impl/JettySSLService.java b/gateway-server/src/main/java/org/apache/hadoop/gateway/services/security/impl/JettySSLService.java
index cb69509..3d73c36 100644
--- a/gateway-server/src/main/java/org/apache/hadoop/gateway/services/security/impl/JettySSLService.java
+++ b/gateway-server/src/main/java/org/apache/hadoop/gateway/services/security/impl/JettySSLService.java
@@ -17,7 +17,14 @@
  */
 package org.apache.hadoop.gateway.services.security.impl;
 
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
 import java.security.cert.Certificate;
+import java.security.cert.CertificateException;
 import java.security.cert.CertificateExpiredException;
 import java.security.cert.CertificateNotYetValidException;
 import java.security.cert.X509Certificate;
@@ -37,8 +44,6 @@ import org.apache.hadoop.gateway.services.security.KeystoreServiceException;
 import org.apache.hadoop.gateway.services.security.MasterService;
 import org.apache.hadoop.gateway.services.security.SSLService;
 import org.apache.hadoop.gateway.util.X500PrincipalParser;
-import org.eclipse.jetty.server.ssl.SslConnector;
-import org.eclipse.jetty.server.ssl.SslSelectChannelConnector;
 import org.eclipse.jetty.util.ssl.SslContextFactory;
 
 public class JettySSLService implements SSLService {
@@ -160,8 +165,8 @@ public class JettySSLService implements SSLService {
       throw new ServiceLifecycleException("Public certificate for the gateway is not of the expected type of X509Certificate. Something is wrong with the gateway keystore.");
     }
   }
-  
-  public Object buildSSlConnector( String keystoreFileName ) {
+
+  public Object buildSslContextFactory( String keystoreFileName ) throws KeyStoreException, IOException, CertificateException, NoSuchAlgorithmException {
     SslContextFactory sslContextFactory = new SslContextFactory( true );
     sslContextFactory.setCertAlias( "gateway-identity" );
     sslContextFactory.setKeyStoreType(keystoreType);
@@ -183,7 +188,7 @@ public class JettySSLService implements SSLService {
     String truststorePassword = null;
     if (clientAuthNeeded) {
       if (truststorePath != null) {
-        sslContextFactory.setTrustStore(truststorePath);
+        sslContextFactory.setTrustStore(loadKeyStore(keystoreFileName, keystoreType, master));
         char[] truststorePwd = null;
         try {
           truststorePwd = as.getPasswordFromAliasForGateway(GATEWAY_TRUSTSTORE_PASSWORD);
@@ -202,7 +207,7 @@ public class JettySSLService implements SSLService {
       else {
         // when clientAuthIsNeeded but no truststore provided
         // default to the server's keystore and details
-        sslContextFactory.setTrustStore(keystoreFileName);
+        sslContextFactory.setTrustStore(loadKeyStore(keystoreFileName, keystoreType, master));
         sslContextFactory.setTrustStorePassword(new String(master));
         sslContextFactory.setTrustStoreType(keystoreType);
       }
@@ -218,9 +223,7 @@ public class JettySSLService implements SSLService {
     if (sslExcludeProtocols != null && !sslExcludeProtocols.isEmpty()) {
       sslContextFactory.setExcludeProtocols( sslExcludeProtocols.toArray(new String[sslExcludeProtocols.size()]) );
     }
-    SslConnector sslConnector = new SslSelectChannelConnector( sslContextFactory );
-
-    return sslConnector;
+    return sslContextFactory;
   }
   
   @Override
@@ -234,4 +237,12 @@ public class JettySSLService implements SSLService {
     // TODO Auto-generated method stub
     
   }
+
+  private static KeyStore loadKeyStore( String fileName, String storeType, char[] storePass ) throws CertificateException, NoSuchAlgorithmException, IOException, KeyStoreException {
+    KeyStore keystore = KeyStore.getInstance(storeType);
+    InputStream is = new FileInputStream(fileName);
+    keystore.load( is, storePass );
+    return keystore;
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-server/src/main/java/org/apache/hadoop/gateway/trace/TraceInput.java
----------------------------------------------------------------------
diff --git a/gateway-server/src/main/java/org/apache/hadoop/gateway/trace/TraceInput.java b/gateway-server/src/main/java/org/apache/hadoop/gateway/trace/TraceInput.java
index 3d10538..d6d7246 100644
--- a/gateway-server/src/main/java/org/apache/hadoop/gateway/trace/TraceInput.java
+++ b/gateway-server/src/main/java/org/apache/hadoop/gateway/trace/TraceInput.java
@@ -17,12 +17,13 @@
  */
 package org.apache.hadoop.gateway.trace;
 
+import org.apache.hadoop.gateway.servlet.SynchronousServletInputStreamAdapter;
 import org.apache.log4j.Logger;
 
 import javax.servlet.ServletInputStream;
 import java.io.IOException;
 
-class TraceInput extends ServletInputStream {
+class TraceInput extends SynchronousServletInputStreamAdapter {
 
   private static Logger log = Logger.getLogger( TraceHandler.HTTP_REQUEST_LOGGER );
   private static Logger bodyLog = Logger.getLogger( TraceHandler.HTTP_REQUEST_BODY_LOGGER );

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-server/src/main/java/org/apache/hadoop/gateway/trace/TraceOutput.java
----------------------------------------------------------------------
diff --git a/gateway-server/src/main/java/org/apache/hadoop/gateway/trace/TraceOutput.java b/gateway-server/src/main/java/org/apache/hadoop/gateway/trace/TraceOutput.java
index cec59b3..166753b 100644
--- a/gateway-server/src/main/java/org/apache/hadoop/gateway/trace/TraceOutput.java
+++ b/gateway-server/src/main/java/org/apache/hadoop/gateway/trace/TraceOutput.java
@@ -17,12 +17,13 @@
  */
 package org.apache.hadoop.gateway.trace;
 
+import org.apache.hadoop.gateway.servlet.SynchronousServletOutputStreamAdapter;
 import org.apache.log4j.Logger;
 
 import javax.servlet.ServletOutputStream;
 import java.io.IOException;
 
-class TraceOutput extends ServletOutputStream {
+class TraceOutput extends SynchronousServletOutputStreamAdapter {
 
   private static Logger log = Logger.getLogger( TraceHandler.HTTP_RESPONSE_LOGGER );
   private static Logger bodyLog = Logger.getLogger( TraceHandler.HTTP_RESPONSE_BODY_LOGGER );

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-server/src/test/java/org/apache/hadoop/gateway/jetty/JettyHttpsTest.java
----------------------------------------------------------------------
diff --git a/gateway-server/src/test/java/org/apache/hadoop/gateway/jetty/JettyHttpsTest.java b/gateway-server/src/test/java/org/apache/hadoop/gateway/jetty/JettyHttpsTest.java
deleted file mode 100644
index 2223753..0000000
--- a/gateway-server/src/test/java/org/apache/hadoop/gateway/jetty/JettyHttpsTest.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.gateway.jetty;
-
-import org.apache.hadoop.test.category.ManualTests;
-import org.apache.hadoop.test.category.MediumTests;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.conn.ClientConnectionManager;
-import org.apache.http.conn.scheme.Scheme;
-import org.apache.http.conn.scheme.SchemeRegistry;
-import org.apache.http.conn.ssl.SSLSocketFactory;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.impl.conn.BasicClientConnectionManager;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.ssl.SslConnector;
-import org.eclipse.jetty.server.ssl.SslSelectChannelConnector;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.util.ssl.SslContextFactory;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.net.ssl.*;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.*;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-import java.security.cert.CertificateException;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.junit.Assert.assertThat;
-
-@Category( { ManualTests.class, MediumTests.class } )
-public class JettyHttpsTest {
-
-  Logger log = LoggerFactory.getLogger( JettyHttpsTest.class );
-
-  private Server jetty;
-
-  @BeforeClass
-  public static void setupSuite() {
-    //System.setProperty( "java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol" );
-    //System.setProperty( "javax.net.debug", "ssl" );
-  }
-
-  @Before
-  public void setupTest() throws Exception {
-
-    SslContextFactory sslContext = new SslContextFactory( true );
-    sslContext.setCertAlias( "server" );
-    sslContext.setKeyStorePath( "target/test-classes/server-keystore.jks" );
-    sslContext.setKeyStorePassword( "horton" );
-    sslContext.setKeyManagerPassword( "horton" );
-    sslContext.setTrustStore( "target/test-classes/server-truststore.jks" );
-    sslContext.setTrustStorePassword( "horton" );
-    sslContext.setNeedClientAuth( false );
-    sslContext.setTrustAll( true );
-    SslConnector sslConnector = new SslSelectChannelConnector( sslContext );
-
-    ServletContextHandler context = new ServletContextHandler( ServletContextHandler.SESSIONS );
-    context.setContextPath( "/" );
-    ServletHolder servletHolder = new ServletHolder( new MockServlet() );
-    context.addServlet( servletHolder, "/*" );
-
-    jetty = new Server();
-    jetty.addConnector( sslConnector );
-    jetty.setHandler( context );
-    jetty.start();
-  }
-
-  @After
-  public void cleanupTest() throws Exception {
-    jetty.stop();
-    jetty.join();
-  }
-
-  @Test
-  public void testHttps() throws Exception {
-    int port = jetty.getConnectors()[ 0 ].getLocalPort();
-    String url = "https://localhost:" + port + "/";
-
-    System.out.println( "Jetty HTTPS listenting on port " + port + ". Press any key to continue." );
-    System.in.read();
-
-    SSLContext ctx = SSLContext.getInstance( "TLS" );
-    KeyManager[] keyManagers = createKeyManagers( "jks", "target/test-classes/client-keystore.jks", "horton" );
-    TrustManager[] trustManagers = createTrustManagers( "jks", "target/test-classes/client-truststore.jks", "horton" );
-    ctx.init( keyManagers, trustManagers, new SecureRandom() );
-
-    SSLSocketFactory socketFactory = new SSLSocketFactory( ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER );
-
-    SchemeRegistry schemes = new SchemeRegistry();
-    schemes.register( new Scheme( "https", port, socketFactory ) );
-    ClientConnectionManager cm = new BasicClientConnectionManager( schemes );
-
-    HttpClient client = new DefaultHttpClient( cm );
-
-    HttpGet get = new HttpGet( url );
-    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
-    client.execute( get ).getEntity().writeTo( buffer );
-    assertThat( buffer.toString(), equalTo( "<html>Hello!</html>" ) );
-  }
-
-  private static KeyManager[] createKeyManagers( String keyStoreType, String keyStorePath, String keyStorePassword ) throws Exception {
-    KeyStore keyStore = loadKeyStore( keyStoreType, keyStorePath, keyStorePassword );
-    KeyManagerFactory kmf = KeyManagerFactory.getInstance( KeyManagerFactory.getDefaultAlgorithm() );
-    kmf.init( keyStore, keyStorePassword.toCharArray() );
-    return kmf.getKeyManagers();
-  }
-
-  private static TrustManager[] createTrustManagers( String trustStoreType, String trustStorePath, String trustStorePassword ) throws Exception {
-    KeyStore trustStore = loadKeyStore( trustStoreType, trustStorePath, trustStorePassword );
-    TrustManagerFactory tmf = TrustManagerFactory.getInstance( TrustManagerFactory.getDefaultAlgorithm() );
-    tmf.init( trustStore );
-    return tmf.getTrustManagers();
-  }
-
-  private static KeyStore loadKeyStore( String type, String path, String password ) throws IOException, NoSuchAlgorithmException, CertificateException, KeyStoreException {
-    KeyStore keyStore = KeyStore.getInstance( type );
-    InputStream keystoreInput = new FileInputStream( path );
-    keyStore.load( keystoreInput, password.toCharArray() );
-    return keyStore;
-  }
-
-private static class MockServlet extends HttpServlet {
-  @Override
-  protected void doGet( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException {
-    resp.setContentType( "text/html" );
-    resp.getWriter().write( "<html>Hello!</html>" );
-  }
-}
-
-}

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-server/src/test/java/org/apache/hadoop/gateway/security/ShiroEmbeddedLdapTest.java
----------------------------------------------------------------------
diff --git a/gateway-server/src/test/java/org/apache/hadoop/gateway/security/ShiroEmbeddedLdapTest.java b/gateway-server/src/test/java/org/apache/hadoop/gateway/security/ShiroEmbeddedLdapTest.java
index 75744e5..aede0ad 100644
--- a/gateway-server/src/test/java/org/apache/hadoop/gateway/security/ShiroEmbeddedLdapTest.java
+++ b/gateway-server/src/test/java/org/apache/hadoop/gateway/security/ShiroEmbeddedLdapTest.java
@@ -104,7 +104,7 @@ public class ShiroEmbeddedLdapTest {
 
   @Test
   public void testShiro() throws Exception {
-    String url = "http://localhost:" + jetty.getConnectors()[0].getPort() + "/";
+    String url = "http://localhost:" + jetty.getURI().getPort() + "/";
 
     given()
         .expect().statusCode( 401 )

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-service-webhdfs/src/test/java/org/apache/hadoop/gateway/hdfs/dispatch/WebHdfsHaDispatchTest.java
----------------------------------------------------------------------
diff --git a/gateway-service-webhdfs/src/test/java/org/apache/hadoop/gateway/hdfs/dispatch/WebHdfsHaDispatchTest.java b/gateway-service-webhdfs/src/test/java/org/apache/hadoop/gateway/hdfs/dispatch/WebHdfsHaDispatchTest.java
index 7e6dc1b..ed1eede 100644
--- a/gateway-service-webhdfs/src/test/java/org/apache/hadoop/gateway/hdfs/dispatch/WebHdfsHaDispatchTest.java
+++ b/gateway-service-webhdfs/src/test/java/org/apache/hadoop/gateway/hdfs/dispatch/WebHdfsHaDispatchTest.java
@@ -22,6 +22,7 @@ import org.apache.hadoop.gateway.ha.provider.HaProvider;
 import org.apache.hadoop.gateway.ha.provider.HaServletContextListener;
 import org.apache.hadoop.gateway.ha.provider.impl.DefaultHaProvider;
 import org.apache.hadoop.gateway.ha.provider.impl.HaDescriptorFactory;
+import org.apache.hadoop.gateway.servlet.SynchronousServletOutputStreamAdapter;
 import org.apache.http.client.methods.HttpRequestBase;
 import org.apache.http.client.methods.HttpUriRequest;
 import org.apache.http.impl.client.DefaultHttpClient;
@@ -33,7 +34,6 @@ import org.junit.Test;
 
 import javax.servlet.FilterConfig;
 import javax.servlet.ServletContext;
-import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -74,10 +74,10 @@ public class WebHdfsHaDispatchTest {
       EasyMock.expect(inboundRequest.getAttribute("dispatch.ha.failover.counter")).andReturn(new AtomicInteger(1)).once();
 
       HttpServletResponse outboundResponse = EasyMock.createNiceMock(HttpServletResponse.class);
-      EasyMock.expect(outboundResponse.getOutputStream()).andAnswer( new IAnswer<ServletOutputStream>() {
+      EasyMock.expect(outboundResponse.getOutputStream()).andAnswer( new IAnswer<SynchronousServletOutputStreamAdapter>() {
          @Override
-         public ServletOutputStream answer() throws Throwable {
-            return new ServletOutputStream() {
+         public SynchronousServletOutputStreamAdapter answer() throws Throwable {
+            return new SynchronousServletOutputStreamAdapter() {
                @Override
                public void write( int b ) throws IOException {
                   throw new IOException( "unreachable-host" );

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-spi/pom.xml
----------------------------------------------------------------------
diff --git a/gateway-spi/pom.xml b/gateway-spi/pom.xml
index 6c55072..196515e 100644
--- a/gateway-spi/pom.xml
+++ b/gateway-spi/pom.xml
@@ -59,12 +59,6 @@
             <groupId>org.apache.hadoop</groupId>
             <artifactId>hadoop-common</artifactId>
         </dependency>
-        <!--
-        <dependency>
-            <groupId>org.eclipse.jetty.orbit</groupId>
-            <artifactId>javax.servlet</artifactId>
-        </dependency>
-        -->
         <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>javax.servlet-api</artifactId>

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-spi/src/main/java/org/apache/hadoop/gateway/services/security/SSLService.java
----------------------------------------------------------------------
diff --git a/gateway-spi/src/main/java/org/apache/hadoop/gateway/services/security/SSLService.java b/gateway-spi/src/main/java/org/apache/hadoop/gateway/services/security/SSLService.java
index 2863eff..d9ea6ed 100644
--- a/gateway-spi/src/main/java/org/apache/hadoop/gateway/services/security/SSLService.java
+++ b/gateway-spi/src/main/java/org/apache/hadoop/gateway/services/security/SSLService.java
@@ -17,8 +17,13 @@
  */
 package org.apache.hadoop.gateway.services.security;
 
+import java.io.IOException;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
+
 import org.apache.hadoop.gateway.services.Service;
 
 public interface SSLService extends Service {
-  public Object buildSSlConnector(String gatewayHomeDir);
+  Object buildSslContextFactory(String gatewayHomeDir) throws KeyStoreException, IOException, CertificateException, NoSuchAlgorithmException;
 }

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-spi/src/test/java/org/apache/hadoop/gateway/dispatch/DefaultDispatchTest.java
----------------------------------------------------------------------
diff --git a/gateway-spi/src/test/java/org/apache/hadoop/gateway/dispatch/DefaultDispatchTest.java b/gateway-spi/src/test/java/org/apache/hadoop/gateway/dispatch/DefaultDispatchTest.java
index 1b06a8c..4c360ff 100644
--- a/gateway-spi/src/test/java/org/apache/hadoop/gateway/dispatch/DefaultDispatchTest.java
+++ b/gateway-spi/src/test/java/org/apache/hadoop/gateway/dispatch/DefaultDispatchTest.java
@@ -34,11 +34,11 @@ import java.net.UnknownHostException;
 
 import javax.servlet.ServletContext;
 import javax.servlet.ServletInputStream;
-import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.hadoop.gateway.config.GatewayConfig;
+import org.apache.hadoop.gateway.servlet.SynchronousServletOutputStreamAdapter;
 import org.apache.http.HttpEntity;
 import org.apache.http.client.methods.HttpUriRequest;
 import org.apache.http.impl.client.DefaultHttpClient;
@@ -64,10 +64,10 @@ public class DefaultDispatchTest {
     HttpServletRequest inboundRequest = EasyMock.createNiceMock( HttpServletRequest.class );
 
     HttpServletResponse outboundResponse = EasyMock.createNiceMock( HttpServletResponse.class );
-    EasyMock.expect( outboundResponse.getOutputStream() ).andAnswer( new IAnswer<ServletOutputStream>() {
+    EasyMock.expect( outboundResponse.getOutputStream() ).andAnswer( new IAnswer<SynchronousServletOutputStreamAdapter>() {
       @Override
-      public ServletOutputStream answer() throws Throwable {
-        return new ServletOutputStream() {
+      public SynchronousServletOutputStreamAdapter answer() throws Throwable {
+        return new SynchronousServletOutputStreamAdapter() {
           @Override
           public void write( int b ) throws IOException {
             throw new IOException( "unreachable-host" );

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-test-release/pom.xml
----------------------------------------------------------------------
diff --git a/gateway-test-release/pom.xml b/gateway-test-release/pom.xml
index a89b02c..18727bf 100644
--- a/gateway-test-release/pom.xml
+++ b/gateway-test-release/pom.xml
@@ -35,6 +35,11 @@
 
     <dependencies>
         <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+            <version>3.1.0</version>
+        </dependency>
+        <dependency>
             <groupId>org.apache.hadoop</groupId>
             <artifactId>hadoop-client</artifactId>
             <version>2.7.1</version>
@@ -123,7 +128,7 @@
         <dependency>
             <groupId>org.apache.knox</groupId>
             <artifactId>gateway-release</artifactId>
-            <version>0.9.0-SNAPSHOT</version>
+            <version>${gateway-version}</version>
             <exclusions>
                 <exclusion>
                     <groupId>org.apache.directory.server</groupId>
@@ -154,19 +159,6 @@
             </exclusions>
         </dependency>
         <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.5</version>
-            <scope>provided</scope>
-        </dependency>
-         <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>javax.servlet-api</artifactId>
-            <version>3.0.1</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
             <groupId>commons-beanutils</groupId>
             <artifactId>commons-beanutils</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-test-utils/pom.xml
----------------------------------------------------------------------
diff --git a/gateway-test-utils/pom.xml b/gateway-test-utils/pom.xml
index 4dc2790..4283d62 100644
--- a/gateway-test-utils/pom.xml
+++ b/gateway-test-utils/pom.xml
@@ -50,6 +50,11 @@
     <dependencies>
 
         <dependency>
+            <groupId>${gateway-group}</groupId>
+            <artifactId>gateway-util-common</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>org.hamcrest</groupId>
             <artifactId>hamcrest-core</artifactId>
             <scope>provided</scope>
@@ -91,14 +96,6 @@
             <artifactId>jetty-servlet</artifactId>
             <scope>provided</scope>
         </dependency>
-        <!--
-        <dependency>
-            <groupId>org.eclipse.jetty.orbit</groupId>
-            <artifactId>javax.servlet</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        -->
-
         <dependency>
             <groupId>org.apache.httpcomponents</groupId>
             <artifactId>httpclient</artifactId>

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-test-utils/src/main/java/org/apache/hadoop/test/log/NoOpLogger.java
----------------------------------------------------------------------
diff --git a/gateway-test-utils/src/main/java/org/apache/hadoop/test/log/NoOpLogger.java b/gateway-test-utils/src/main/java/org/apache/hadoop/test/log/NoOpLogger.java
index 420deab..8fd24ed 100644
--- a/gateway-test-utils/src/main/java/org/apache/hadoop/test/log/NoOpLogger.java
+++ b/gateway-test-utils/src/main/java/org/apache/hadoop/test/log/NoOpLogger.java
@@ -64,6 +64,10 @@ public class NoOpLogger implements Logger {
   }
 
   @Override
+  public void debug( String msg, long arg ) {
+  }
+
+  @Override
   public void debug( Throwable thrown ) {
   }
 

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-test-utils/src/main/java/org/apache/hadoop/test/mock/MockHttpServletRequest.java
----------------------------------------------------------------------
diff --git a/gateway-test-utils/src/main/java/org/apache/hadoop/test/mock/MockHttpServletRequest.java b/gateway-test-utils/src/main/java/org/apache/hadoop/test/mock/MockHttpServletRequest.java
index 29198e7..82ebe3d 100644
--- a/gateway-test-utils/src/main/java/org/apache/hadoop/test/mock/MockHttpServletRequest.java
+++ b/gateway-test-utils/src/main/java/org/apache/hadoop/test/mock/MockHttpServletRequest.java
@@ -29,6 +29,7 @@ import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpUpgradeHandler;
 import javax.servlet.http.Part;
 import java.io.BufferedReader;
 import java.io.IOException;
@@ -161,6 +162,11 @@ public class MockHttpServletRequest implements HttpServletRequest {
   }
 
   @Override
+  public String changeSessionId() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
   public boolean isRequestedSessionIdValid() {
     return false;
   }
@@ -205,6 +211,11 @@ public class MockHttpServletRequest implements HttpServletRequest {
   }
 
   @Override
+  public <T extends HttpUpgradeHandler> T upgrade( Class<T> aClass ) throws IOException, ServletException {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
   public Object getAttribute( String s ) {
     return null;
   }
@@ -230,6 +241,11 @@ public class MockHttpServletRequest implements HttpServletRequest {
   }
 
   @Override
+  public long getContentLengthLong() {
+    return 0;
+  }
+
+  @Override
   public String getContentType() {
     return contentType;
   }

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-test-utils/src/main/java/org/apache/hadoop/test/mock/MockHttpServletResponse.java
----------------------------------------------------------------------
diff --git a/gateway-test-utils/src/main/java/org/apache/hadoop/test/mock/MockHttpServletResponse.java b/gateway-test-utils/src/main/java/org/apache/hadoop/test/mock/MockHttpServletResponse.java
index 3e84304..9d20d17 100644
--- a/gateway-test-utils/src/main/java/org/apache/hadoop/test/mock/MockHttpServletResponse.java
+++ b/gateway-test-utils/src/main/java/org/apache/hadoop/test/mock/MockHttpServletResponse.java
@@ -151,6 +151,10 @@ public class MockHttpServletResponse implements HttpServletResponse {
   }
 
   @Override
+  public void setContentLengthLong( long l ) {
+  }
+
+  @Override
   public void setContentType( String s ) {
   }
 

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-test-utils/src/main/java/org/apache/hadoop/test/mock/MockServer.java
----------------------------------------------------------------------
diff --git a/gateway-test-utils/src/main/java/org/apache/hadoop/test/mock/MockServer.java b/gateway-test-utils/src/main/java/org/apache/hadoop/test/mock/MockServer.java
index 508c71a..5d95ce6 100644
--- a/gateway-test-utils/src/main/java/org/apache/hadoop/test/mock/MockServer.java
+++ b/gateway-test-utils/src/main/java/org/apache/hadoop/test/mock/MockServer.java
@@ -90,7 +90,7 @@ public class MockServer {
   }
 
   public int getPort() {
-    return jetty.getConnectors()[0].getLocalPort();
+    return jetty.getURI().getPort();
   }
 
   public MockRequestMatcher expect() {

http://git-wip-us.apache.org/repos/asf/knox/blob/96e39622/gateway-test-utils/src/main/java/org/apache/hadoop/test/mock/MockServletContext.java
----------------------------------------------------------------------
diff --git a/gateway-test-utils/src/main/java/org/apache/hadoop/test/mock/MockServletContext.java b/gateway-test-utils/src/main/java/org/apache/hadoop/test/mock/MockServletContext.java
index ff3094e..0df84c3 100644
--- a/gateway-test-utils/src/main/java/org/apache/hadoop/test/mock/MockServletContext.java
+++ b/gateway-test-utils/src/main/java/org/apache/hadoop/test/mock/MockServletContext.java
@@ -285,4 +285,9 @@ public class MockServletContext implements ServletContext {
   @Override
   public void declareRoles( String... strings ) {
   }
+
+  @Override
+  public String getVirtualServerName() {
+    throw new UnsupportedOperationException();
+  }
 }