Skip to content

Commit

Permalink
Isolate jetty dependencies into a single package
Browse files Browse the repository at this point in the history
The servlet and request adapters have moved to the "servlet" package.
The only dependency they had on jetty was conditional anyway, so
the condition was also modified to not even require jetty on the
classpath.

See wiremockgh-407. Not a complete modularization yet, but splits up the
servlet-only stuff from the jetty server.
  • Loading branch information
dsyer committed Jun 28, 2016
1 parent f613b86 commit ae13c55
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 32 deletions.
4 changes: 2 additions & 2 deletions sample-war/src/main/webapp/WEB-INF/web.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

<servlet>
<servlet-name>wiremock-mock-service-handler-servlet</servlet-name>
<servlet-class>com.github.tomakehurst.wiremock.jetty9.JettyHandlerDispatchingServlet</servlet-class>
<servlet-class>com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet</servlet-class>
<init-param>
<param-name>RequestHandlerClass</param-name>
<param-value>com.github.tomakehurst.wiremock.http.StubRequestHandler</param-value>
Expand All @@ -36,7 +36,7 @@

<servlet>
<servlet-name>wiremock-admin-handler-servlet</servlet-name>
<servlet-class>com.github.tomakehurst.wiremock.jetty9.JettyHandlerDispatchingServlet</servlet-class>
<servlet-class>com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet</servlet-class>
<init-param>
<param-name>RequestHandlerClass</param-name>
<param-value>com.github.tomakehurst.wiremock.http.AdminRequestHandler</param-value>
Expand Down
4 changes: 2 additions & 2 deletions sample-war/src/main/webappCustomMapping/WEB-INF/web.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

<servlet>
<servlet-name>wiremock-mock-service-handler-servlet</servlet-name>
<servlet-class>com.github.tomakehurst.wiremock.jetty9.JettyHandlerDispatchingServlet</servlet-class>
<servlet-class>com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet</servlet-class>
<init-param>
<param-name>RequestHandlerClass</param-name>
<param-value>com.github.tomakehurst.wiremock.http.StubRequestHandler</param-value>
Expand All @@ -47,7 +47,7 @@

<servlet>
<servlet-name>wiremock-admin-handler-servlet</servlet-name>
<servlet-class>com.github.tomakehurst.wiremock.jetty9.JettyHandlerDispatchingServlet</servlet-class>
<servlet-class>com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet</servlet-class>
<init-param>
<param-name>RequestHandlerClass</param-name>
<param-value>com.github.tomakehurst.wiremock.http.AdminRequestHandler</param-value>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

<servlet>
<servlet-name>wiremock-mock-service-handler-servlet</servlet-name>
<servlet-class>com.github.tomakehurst.wiremock.jetty9.JettyHandlerDispatchingServlet</servlet-class>
<servlet-class>com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet</servlet-class>
<init-param>
<param-name>RequestHandlerClass</param-name>
<param-value>com.github.tomakehurst.wiremock.http.StubRequestHandler</param-value>
Expand All @@ -42,7 +42,7 @@

<servlet>
<servlet-name>wiremock-admin-handler-servlet</servlet-name>
<servlet-class>com.github.tomakehurst.wiremock.jetty9.JettyHandlerDispatchingServlet</servlet-class>
<servlet-class>com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet</servlet-class>
<init-param>
<param-name>RequestHandlerClass</param-name>
<param-value>com.github.tomakehurst.wiremock.http.AdminRequestHandler</param-value>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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 {

Expand Down Expand Up @@ -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");
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,16 @@
* 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;
import com.github.tomakehurst.wiremock.common.Notifier;
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;
Expand All @@ -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";
Expand Down Expand Up @@ -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()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.*;
Expand All @@ -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;
}
Expand Down Expand Up @@ -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();
Expand All @@ -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();
Expand Down

0 comments on commit ae13c55

Please sign in to comment.