This is an automated email from the ASF dual-hosted git repository. cziegeler pushed a commit to branch http/jakarta in repository https://gitbox.apache.org/repos/asf/felix-dev.git
commit 7c6767826f385aa061caed5a203b1cd87a895873 Author: Carsten Ziegeler <[email protected]> AuthorDate: Tue Jan 4 15:24:31 2022 +0100 Fix unregistering servlets --- .../base/internal/service/SharedHttpServiceImpl.java | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/service/SharedHttpServiceImpl.java b/http/base/src/main/java/org/apache/felix/http/base/internal/service/SharedHttpServiceImpl.java index 6dccef0..a63d404 100644 --- a/http/base/src/main/java/org/apache/felix/http/base/internal/service/SharedHttpServiceImpl.java +++ b/http/base/src/main/java/org/apache/felix/http/base/internal/service/SharedHttpServiceImpl.java @@ -97,19 +97,28 @@ public final class SharedHttpServiceImpl throw new IllegalArgumentException("Nothing registered at " + alias); } - final javax.servlet.Servlet s; + final javax.servlet.Servlet s = getServlet(handler); if ( handler.getServlet() instanceof HttpResourceServlet ) { final HttpResourceServlet resource = (HttpResourceServlet)handler.getServlet(); - s = resource.getWrapper(); resource.setWrapper(null); - } else { - s = ((ServletWrapper)handler.getServlet()).getServlet(); } this.handlerRegistry.getRegistry(handler.getContextServiceId()).unregisterServlet(handler.getServletInfo(), true); return s; } } + private javax.servlet.Servlet getServlet(final ServletHandler handler) { + final javax.servlet.Servlet s; + if ( handler.getServlet() instanceof HttpResourceServlet ) { + final HttpResourceServlet resource = (HttpResourceServlet)handler.getServlet(); + s = resource.getWrapper(); + resource.setWrapper(null); + } else { + s = ((ServletWrapper)handler.getServlet()).getServlet(); + } + return s; + } + /** * Unregister a servlet * @param servlet The servlet @@ -124,7 +133,8 @@ public final class SharedHttpServiceImpl while (i.hasNext()) { final Map.Entry<String, ServletHandler> entry = i.next(); - if (entry.getValue().getServlet() == servlet) + final javax.servlet.Servlet s = getServlet(entry.getValue()); + if (s == servlet) { this.handlerRegistry.getRegistry(entry.getValue().getContextServiceId()).unregisterServlet(entry.getValue().getServletInfo(), false);
