diff --git a/sample-war/src/main/webapp/WEB-INF/web.xml b/sample-war/src/main/webapp/WEB-INF/web.xml index ebc91b97d4..d9764fec21 100644 --- a/sample-war/src/main/webapp/WEB-INF/web.xml +++ b/sample-war/src/main/webapp/WEB-INF/web.xml @@ -23,7 +23,7 @@ wiremock-mock-service-handler-servlet - com.github.tomakehurst.wiremock.jetty9.JettyHandlerDispatchingServlet + com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet RequestHandlerClass com.github.tomakehurst.wiremock.http.StubRequestHandler @@ -36,7 +36,7 @@ wiremock-admin-handler-servlet - com.github.tomakehurst.wiremock.jetty9.JettyHandlerDispatchingServlet + com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet RequestHandlerClass com.github.tomakehurst.wiremock.http.AdminRequestHandler diff --git a/sample-war/src/main/webappCustomMapping/WEB-INF/web.xml b/sample-war/src/main/webappCustomMapping/WEB-INF/web.xml index c0c09c0137..46d90f5041 100644 --- a/sample-war/src/main/webappCustomMapping/WEB-INF/web.xml +++ b/sample-war/src/main/webappCustomMapping/WEB-INF/web.xml @@ -26,7 +26,7 @@ wiremock-mock-service-handler-servlet - com.github.tomakehurst.wiremock.jetty9.JettyHandlerDispatchingServlet + com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet RequestHandlerClass com.github.tomakehurst.wiremock.http.StubRequestHandler @@ -47,7 +47,7 @@ wiremock-admin-handler-servlet - com.github.tomakehurst.wiremock.jetty9.JettyHandlerDispatchingServlet + com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet RequestHandlerClass com.github.tomakehurst.wiremock.http.AdminRequestHandler diff --git a/sample-war/src/main/webappLimitedRequestJournal/WEB-INF/web.xml b/sample-war/src/main/webappLimitedRequestJournal/WEB-INF/web.xml index 296457274c..0fa6c37632 100644 --- a/sample-war/src/main/webappLimitedRequestJournal/WEB-INF/web.xml +++ b/sample-war/src/main/webappLimitedRequestJournal/WEB-INF/web.xml @@ -29,7 +29,7 @@ wiremock-mock-service-handler-servlet - com.github.tomakehurst.wiremock.jetty9.JettyHandlerDispatchingServlet + com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet RequestHandlerClass com.github.tomakehurst.wiremock.http.StubRequestHandler @@ -42,7 +42,7 @@ wiremock-admin-handler-servlet - com.github.tomakehurst.wiremock.jetty9.JettyHandlerDispatchingServlet + com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet RequestHandlerClass com.github.tomakehurst.wiremock.http.AdminRequestHandler diff --git a/src/main/java/com/github/tomakehurst/wiremock/jetty9/JettyHttpServer.java b/src/main/java/com/github/tomakehurst/wiremock/jetty9/JettyHttpServer.java index 04261d859a..bfc631ab3e 100644 --- a/src/main/java/com/github/tomakehurst/wiremock/jetty9/JettyHttpServer.java +++ b/src/main/java/com/github/tomakehurst/wiremock/jetty9/JettyHttpServer.java @@ -15,6 +15,30 @@ */ package com.github.tomakehurst.wiremock.jetty9; +import static com.github.tomakehurst.wiremock.common.Exceptions.throwUnchecked; +import static com.github.tomakehurst.wiremock.core.WireMockApp.ADMIN_CONTEXT_ROOT; + +import java.util.EnumSet; + +import javax.servlet.DispatcherType; + +import org.eclipse.jetty.http.MimeTypes; +import org.eclipse.jetty.server.ConnectionFactory; +import org.eclipse.jetty.server.Handler; +import org.eclipse.jetty.server.HttpConfiguration; +import org.eclipse.jetty.server.HttpConnectionFactory; +import org.eclipse.jetty.server.SecureRequestCustomizer; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.server.SslConnectionFactory; +import org.eclipse.jetty.server.handler.HandlerCollection; +import org.eclipse.jetty.servlet.DefaultServlet; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; +import org.eclipse.jetty.servlets.GzipFilter; +import org.eclipse.jetty.util.ssl.SslContextFactory; +import org.eclipse.jetty.util.thread.QueuedThreadPool; + import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.common.FileSource; import com.github.tomakehurst.wiremock.common.HttpsSettings; @@ -27,22 +51,7 @@ import com.github.tomakehurst.wiremock.http.StubRequestHandler; import com.github.tomakehurst.wiremock.servlet.ContentTypeSettingFilter; import com.github.tomakehurst.wiremock.servlet.TrailingSlashFilter; -import org.eclipse.jetty.http.MimeTypes; -import org.eclipse.jetty.server.*; -import org.eclipse.jetty.server.handler.HandlerCollection; -import org.eclipse.jetty.servlet.DefaultServlet; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.eclipse.jetty.servlet.ServletHolder; -import org.eclipse.jetty.servlets.GzipFilter; -import org.eclipse.jetty.util.ssl.SslContextFactory; -import org.eclipse.jetty.util.thread.QueuedThreadPool; - -import javax.servlet.DispatcherType; -import java.util.EnumSet; - -import static com.github.tomakehurst.wiremock.common.Exceptions.throwUnchecked; -import static com.github.tomakehurst.wiremock.core.WireMockApp.ADMIN_CONTEXT_ROOT; -import static com.github.tomakehurst.wiremock.jetty9.JettyHandlerDispatchingServlet.SHOULD_FORWARD_TO_FILES_CONTEXT; +import com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet; class JettyHttpServer implements HttpServer { @@ -238,9 +247,9 @@ private ServletContextHandler addMockServiceContext( mockServiceContext.setAttribute(StubRequestHandler.class.getName(), stubRequestHandler); mockServiceContext.setAttribute(Notifier.KEY, notifier); - ServletHolder servletHolder = mockServiceContext.addServlet(JettyHandlerDispatchingServlet.class, "/"); + ServletHolder servletHolder = mockServiceContext.addServlet(WireMockHandlerDispatchingServlet.class, "/"); servletHolder.setInitParameter(RequestHandler.HANDLER_CLASS_KEY, StubRequestHandler.class.getName()); - servletHolder.setInitParameter(SHOULD_FORWARD_TO_FILES_CONTEXT, "true"); + servletHolder.setInitParameter(WireMockHandlerDispatchingServlet.SHOULD_FORWARD_TO_FILES_CONTEXT, "true"); MimeTypes mimeTypes = new MimeTypes(); mimeTypes.addMimeMapping("json", "application/json"); @@ -263,7 +272,7 @@ private ServletContextHandler addAdminContext( Notifier notifier ) { ServletContextHandler adminContext = new ServletContextHandler(jettyServer, ADMIN_CONTEXT_ROOT); - ServletHolder servletHolder = adminContext.addServlet(JettyHandlerDispatchingServlet.class, "/"); + ServletHolder servletHolder = adminContext.addServlet(WireMockHandlerDispatchingServlet.class, "/"); servletHolder.setInitParameter(RequestHandler.HANDLER_CLASS_KEY, AdminRequestHandler.class.getName()); adminContext.setAttribute(AdminRequestHandler.class.getName(), adminRequestHandler); adminContext.setAttribute(Notifier.KEY, notifier); diff --git a/src/main/java/com/github/tomakehurst/wiremock/jetty9/JettyHandlerDispatchingServlet.java b/src/main/java/com/github/tomakehurst/wiremock/servlet/WireMockHandlerDispatchingServlet.java similarity index 94% rename from src/main/java/com/github/tomakehurst/wiremock/jetty9/JettyHandlerDispatchingServlet.java rename to src/main/java/com/github/tomakehurst/wiremock/servlet/WireMockHandlerDispatchingServlet.java index 57062eaa28..017b282095 100644 --- a/src/main/java/com/github/tomakehurst/wiremock/jetty9/JettyHandlerDispatchingServlet.java +++ b/src/main/java/com/github/tomakehurst/wiremock/servlet/WireMockHandlerDispatchingServlet.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.github.tomakehurst.wiremock.jetty9; +package com.github.tomakehurst.wiremock.servlet; import com.github.tomakehurst.wiremock.common.Exceptions; import com.github.tomakehurst.wiremock.common.LocalNotifier; @@ -21,6 +21,8 @@ import com.github.tomakehurst.wiremock.core.FaultInjector; import com.github.tomakehurst.wiremock.core.WireMockApp; import com.github.tomakehurst.wiremock.http.*; +import com.github.tomakehurst.wiremock.jetty9.JettyFaultInjector; +import com.github.tomakehurst.wiremock.jetty9.JettyHttpsFaultInjector; import javax.servlet.RequestDispatcher; import javax.servlet.ServletConfig; @@ -38,7 +40,7 @@ import static java.net.HttpURLConnection.HTTP_NOT_FOUND; import static java.net.URLDecoder.decode; -public class JettyHandlerDispatchingServlet extends HttpServlet { +public class WireMockHandlerDispatchingServlet extends HttpServlet { public static final String SHOULD_FORWARD_TO_FILES_CONTEXT = "shouldForwardToFilesContext"; public static final String MAPPED_UNDER_KEY = "mappedUnder"; @@ -92,7 +94,7 @@ private boolean getFileContextForwardingFlagFrom(ServletConfig config) { protected void service(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException { LocalNotifier.set(notifier); - Request request = new JettyHttpServletRequestAdapter(httpServletRequest, mappedUnder); + Request request = new WireMockHttpServletRequestAdapter(httpServletRequest, mappedUnder); Response response = requestHandler.handle(request); if (Thread.currentThread().isInterrupted()) { diff --git a/src/main/java/com/github/tomakehurst/wiremock/jetty9/JettyHttpServletRequestAdapter.java b/src/main/java/com/github/tomakehurst/wiremock/servlet/WireMockHttpServletRequestAdapter.java similarity index 88% rename from src/main/java/com/github/tomakehurst/wiremock/jetty9/JettyHttpServletRequestAdapter.java rename to src/main/java/com/github/tomakehurst/wiremock/servlet/WireMockHttpServletRequestAdapter.java index 00519de3fa..b3980d51a6 100644 --- a/src/main/java/com/github/tomakehurst/wiremock/jetty9/JettyHttpServletRequestAdapter.java +++ b/src/main/java/com/github/tomakehurst/wiremock/servlet/WireMockHttpServletRequestAdapter.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.github.tomakehurst.wiremock.jetty9; +package com.github.tomakehurst.wiremock.servlet; import com.github.tomakehurst.wiremock.common.Gzip; import com.github.tomakehurst.wiremock.http.*; @@ -33,17 +33,17 @@ import static com.google.common.io.ByteStreams.toByteArray; import static java.util.Collections.list; -public class JettyHttpServletRequestAdapter implements Request { +public class WireMockHttpServletRequestAdapter implements Request { private final HttpServletRequest request; private byte[] cachedBody; private String urlPrefixToRemove; - public JettyHttpServletRequestAdapter(HttpServletRequest request) { + public WireMockHttpServletRequestAdapter(HttpServletRequest request) { this.request = request; } - public JettyHttpServletRequestAdapter(HttpServletRequest request, String urlPrefixToRemove) { + public WireMockHttpServletRequestAdapter(HttpServletRequest request, String urlPrefixToRemove) { this.request = request; this.urlPrefixToRemove = urlPrefixToRemove; } @@ -202,6 +202,9 @@ public QueryParameter queryParameter(String key) { @Override public boolean isBrowserProxyRequest() { + if (!isJetty()) { + return false; + } if (request instanceof org.eclipse.jetty.server.Request) { org.eclipse.jetty.server.Request jettyRequest = (org.eclipse.jetty.server.Request) request; return URI.create(jettyRequest.getUri().toString()).isAbsolute(); @@ -210,6 +213,21 @@ public boolean isBrowserProxyRequest() { return false; } + private boolean isJetty() { + try { + getClass("org.eclipse.jetty.server.Request"); + return true; + } catch (Exception e) { + } + return false; + } + + private void getClass(String type) throws ClassNotFoundException { + ClassLoader contextCL = Thread.currentThread().getContextClassLoader(); + ClassLoader loader = contextCL == null ? WireMockHttpServletRequestAdapter.class.getClassLoader() : contextCL; + Class.forName(type, false, loader); + } + @Override public String toString() { return request.toString() + getBodyAsString();