From 9d4b92b7ded4ede154df22f452d1f637fda55151 Mon Sep 17 00:00:00 2001 From: Joakim Erdfelt Date: Wed, 16 Sep 2020 17:16:05 -0500 Subject: [PATCH] Issue #5032 - Updating based on review with @gregw and @janb Signed-off-by: Joakim Erdfelt --- .../org/eclipse/jetty/servlet/BaseHolder.java | 6 ++++++ .../org/eclipse/jetty/servlet/FilterHolder.java | 2 +- .../eclipse/jetty/servlet/ServletHolder.java | 2 +- .../jetty/servlet/ComponentWrapTest.java | 17 ++--------------- .../jetty/servlet/ServletLifeCycleTest.java | 4 ++-- 5 files changed, 12 insertions(+), 19 deletions(-) diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/BaseHolder.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/BaseHolder.java index 95c412ec9747..4a6a3609973a 100644 --- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/BaseHolder.java +++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/BaseHolder.java @@ -190,6 +190,12 @@ protected T wrap(final T component, final Class wrapperFunctionType, fina { T ret = component; ServletContextHandler contextHandler = getServletHandler().getServletContextHandler(); + if (contextHandler == null) + { + ContextHandler.Context context = ContextHandler.getCurrentContext(); + contextHandler = (ServletContextHandler)(context == null ? null : context.getContextHandler()); + } + if (contextHandler != null) { for (W wrapperFunction : contextHandler.getBeans(wrapperFunctionType)) diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/FilterHolder.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/FilterHolder.java index a5390b130e29..ded28c8769f9 100644 --- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/FilterHolder.java +++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/FilterHolder.java @@ -132,7 +132,7 @@ public void initialize() throws Exception throw ex; } } - _filter = wrap(_filter, WrapFunction.class, WrapFunction::wrapFilter); + _filter = wrap(_filter, FilterHolder.WrapFunction.class, FilterHolder.WrapFunction::wrapFilter); _config = new Config(); if (LOG.isDebugEnabled()) LOG.debug("Filter.init {}", _filter); diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java index e41941727d3e..4929c16f9300 100644 --- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java +++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java @@ -445,7 +445,7 @@ public void destroyInstance(Object o) if (o == null) return; - Servlet servlet = ((Servlet)o); + Servlet servlet = (Servlet)o; // need to use the unwrapped servlet because lifecycle callbacks such as // postconstruct and predestroy are based off the classname and the wrapper diff --git a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ComponentWrapTest.java b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ComponentWrapTest.java index 2f7ebcf1210d..f5c38a3e645f 100644 --- a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ComponentWrapTest.java +++ b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ComponentWrapTest.java @@ -103,8 +103,6 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IO @Override public void init(FilterConfig filterConfig) { - // TODO: this shouldn't be required (see FIXME below) - filterConfig.getServletContext().addListener(LoggingRequestListener.class); } @Override @@ -120,19 +118,8 @@ public void destroy() }); contextHandler.addFilter(filterHolder, "/*", EnumSet.of(DispatcherType.REQUEST)); - /* FIXME - These 2 options for event listeners don't work in embedded mode. - - 1) contextHandler.addEventListener(new LoggingRequestListener()); - - this does not result in a ListenerHolder. - - 2) ListenerHolder listenerHolder = new ListenerHolder(LoggingRequestListener.class); - contextHandler.getServletHandler().addListener(listenerHolder); - - this results in a ServletHandler without a reference to - the ServletContextHandler - - Only adding Listener during context initialization works (see Filter.init above) - */ + ListenerHolder listenerHolder = new ListenerHolder(LoggingRequestListener.class); + contextHandler.getServletHandler().addListener(listenerHolder); contextHandler.addBean(wrapHandler); server.setHandler(contextHandler); diff --git a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletLifeCycleTest.java b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletLifeCycleTest.java index 4587572027fc..0e49712f836b 100644 --- a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletLifeCycleTest.java +++ b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletLifeCycleTest.java @@ -110,10 +110,10 @@ public void testLifeCycle() throws Exception server.stop(); assertThat(events, Matchers.contains( - "destroy class org.eclipse.jetty.servlet.ServletLifeCycleTest$TestFilter2", "Destroy class org.eclipse.jetty.servlet.ServletLifeCycleTest$TestFilter2", - "destroy class org.eclipse.jetty.servlet.ServletLifeCycleTest$TestFilter", + "destroy class org.eclipse.jetty.servlet.ServletLifeCycleTest$TestFilter2", "Destroy class org.eclipse.jetty.servlet.ServletLifeCycleTest$TestFilter", + "destroy class org.eclipse.jetty.servlet.ServletLifeCycleTest$TestFilter", "Destroy class org.eclipse.jetty.servlet.ServletLifeCycleTest$TestServlet3", "destroy class org.eclipse.jetty.servlet.ServletLifeCycleTest$TestServlet3", "Destroy class org.eclipse.jetty.servlet.ServletLifeCycleTest$TestServlet2",