From 854dbb19c97dece6f385d1bacabba17b680ec27d Mon Sep 17 00:00:00 2001 From: thenatog Date: Mon, 25 Jun 2018 13:23:28 -0400 Subject: [PATCH 1/3] NIFI-5258 - Changed the way the servlets are created for the documentation webapp. --- .../apache/nifi/web/server/JettyServer.java | 49 +++++++++++-------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/JettyServer.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/JettyServer.java index bcada3514870..857ed0d446b0 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/JettyServer.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/JettyServer.java @@ -49,7 +49,6 @@ import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.SslConnectionFactory; -import org.eclipse.jetty.server.handler.ContextHandler; import org.eclipse.jetty.server.handler.ContextHandlerCollection; import org.eclipse.jetty.server.handler.HandlerCollection; import org.eclipse.jetty.server.handler.HandlerList; @@ -64,6 +63,7 @@ import org.eclipse.jetty.webapp.JettyWebXmlConfiguration; import org.eclipse.jetty.webapp.WebAppClassLoader; import org.eclipse.jetty.webapp.WebAppContext; +import org.glassfish.jersey.servlet.ServletContainer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; @@ -337,11 +337,10 @@ private Handler loadWars(final Set bundles) { // load the documentation war webDocsContext = loadWar(webDocsWar, docsContextPath, frameworkClassLoader); - // overlay the actual documentation - final ContextHandlerCollection documentationHandlers = new ContextHandlerCollection(); - documentationHandlers.addHandler(createDocsWebApp(docsContextPath)); - documentationHandlers.addHandler(webDocsContext); - handlers.addHandler(documentationHandlers); + // add the servlets which serve the HTML documentation within the documentation web app + addDocsServlets(webDocsContext); + + handlers.addHandler(webDocsContext); // load the web error app final WebAppContext webErrorContext = loadWar(webErrorWar, "/", frameworkClassLoader); @@ -517,11 +516,9 @@ private WebAppContext loadWar(final File warFile, final String contextPath, fina return webappContext; } - private ContextHandler createDocsWebApp(final String contextPath) { + private void addDocsServlets(WebAppContext docsContext) { try { - final ResourceHandler resourceHandler = new ResourceHandler(); - resourceHandler.setDirectoriesListed(false); - + // Load the nifi/docs directory final File docsDir = getDocsDir("docs"); final Resource docsResource = Resource.newResource(docsDir); @@ -530,26 +527,38 @@ private ContextHandler createDocsWebApp(final String contextPath) { final File workingDocsDirectory = getWorkingDocsDirectory(componentDocsDirPath); final Resource workingDocsResource = Resource.newResource(workingDocsDirectory); + // Load the API docs final File webApiDocsDir = getWebApiDocsDir(); final Resource webApiDocsResource = Resource.newResource(webApiDocsDir); - // create resources for both docs locations - final ResourceCollection resources = new ResourceCollection(docsResource, workingDocsResource, webApiDocsResource); - resourceHandler.setBaseResource(resources); + // Create the servlet which will serve the static resources + ServletHolder defaultHolder = new ServletHolder("default", DefaultServlet.class); + defaultHolder.setInitParameter("dirAllowed", "false"); + + ServletHolder docs = new ServletHolder("docs", DefaultServlet.class); + docs.setInitParameter("resourceBase", docsResource.getURI().toString()); + + ServletHolder components = new ServletHolder("components", DefaultServlet.class); + components.setInitParameter("resourceBase", workingDocsResource.getURI().toString()); + + ServletHolder restApi = new ServletHolder("rest-api", DefaultServlet.class); + restApi.setInitParameter("resourceBase", webApiDocsResource.getURI().toString()); - // create the context handler - final ContextHandler handler = new ContextHandler(contextPath); - handler.setHandler(resourceHandler); + docsContext.addServlet(docs, "/html/*"); + docsContext.addServlet(components, "/components/*"); + docsContext.addServlet(restApi, "/rest-api/*"); + + docsContext.addServlet(defaultHolder, "/"); + + logger.info("Loading documents web app with context path set to " + docsContext.getContextPath()); - logger.info("Loading documents web app with context path set to " + contextPath); - return handler; } catch (Exception ex) { logger.error("Unhandled Exception in createDocsWebApp: " + ex.getMessage()); startUpFailure(ex); - return null; // required by compiler, though never be executed. } } + /** * Returns a File object for the directory containing NIFI documentation. *

@@ -1052,4 +1061,4 @@ public void destroy() { @FunctionalInterface interface ServerConnectorCreator { ServerConnector create(Server server, HttpConfiguration httpConfiguration); -} \ No newline at end of file +} From 330cccb35b43f43cabc06ba77794aefd4e9c0a41 Mon Sep 17 00:00:00 2001 From: thenatog Date: Mon, 25 Jun 2018 13:59:25 -0400 Subject: [PATCH 2/3] NIFI-5258 - Removed some unnecessary code. --- .../java/org/apache/nifi/web/server/JettyServer.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/JettyServer.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/JettyServer.java index 857ed0d446b0..580f468cc219 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/JettyServer.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/JettyServer.java @@ -520,29 +520,26 @@ private void addDocsServlets(WebAppContext docsContext) { try { // Load the nifi/docs directory final File docsDir = getDocsDir("docs"); - final Resource docsResource = Resource.newResource(docsDir); // load the component documentation working directory final File componentDocsDirPath = props.getComponentDocumentationWorkingDirectory(); final File workingDocsDirectory = getWorkingDocsDirectory(componentDocsDirPath); - final Resource workingDocsResource = Resource.newResource(workingDocsDirectory); // Load the API docs final File webApiDocsDir = getWebApiDocsDir(); - final Resource webApiDocsResource = Resource.newResource(webApiDocsDir); // Create the servlet which will serve the static resources ServletHolder defaultHolder = new ServletHolder("default", DefaultServlet.class); defaultHolder.setInitParameter("dirAllowed", "false"); ServletHolder docs = new ServletHolder("docs", DefaultServlet.class); - docs.setInitParameter("resourceBase", docsResource.getURI().toString()); + docs.setInitParameter("resourceBase", docsDir.getPath()); ServletHolder components = new ServletHolder("components", DefaultServlet.class); - components.setInitParameter("resourceBase", workingDocsResource.getURI().toString()); + components.setInitParameter("resourceBase", workingDocsDirectory.getPath()); ServletHolder restApi = new ServletHolder("rest-api", DefaultServlet.class); - restApi.setInitParameter("resourceBase", webApiDocsResource.getURI().toString()); + restApi.setInitParameter("resourceBase", webApiDocsDir.getPath()); docsContext.addServlet(docs, "/html/*"); docsContext.addServlet(components, "/components/*"); From 491294643c60b55abfccd377f5d9d648d666c827 Mon Sep 17 00:00:00 2001 From: thenatog Date: Mon, 25 Jun 2018 17:13:41 -0400 Subject: [PATCH 3/3] NIFI-5258 - Fixed imports. --- .../main/java/org/apache/nifi/web/server/JettyServer.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/JettyServer.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/JettyServer.java index 580f468cc219..2f93ec87a964 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/JettyServer.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/JettyServer.java @@ -49,21 +49,18 @@ import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.SslConnectionFactory; -import org.eclipse.jetty.server.handler.ContextHandlerCollection; import org.eclipse.jetty.server.handler.HandlerCollection; import org.eclipse.jetty.server.handler.HandlerList; -import org.eclipse.jetty.server.handler.ResourceHandler; import org.eclipse.jetty.server.handler.gzip.GzipHandler; +import org.eclipse.jetty.servlet.DefaultServlet; import org.eclipse.jetty.servlet.FilterHolder; -import org.eclipse.jetty.util.resource.Resource; -import org.eclipse.jetty.util.resource.ResourceCollection; +import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.util.ssl.SslContextFactory; import org.eclipse.jetty.util.thread.QueuedThreadPool; import org.eclipse.jetty.webapp.Configuration; import org.eclipse.jetty.webapp.JettyWebXmlConfiguration; import org.eclipse.jetty.webapp.WebAppClassLoader; import org.eclipse.jetty.webapp.WebAppContext; -import org.glassfish.jersey.servlet.ServletContainer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException;