From cbec18af6028105cfa5261c6176c29ac210140bc Mon Sep 17 00:00:00 2001 From: Jan Bartel Date: Tue, 22 Nov 2011 14:09:45 +1100 Subject: [PATCH] 364430 Support web.xml enabled state for servlets --- .../jetty/servlet/ServletContextHandler.java | 5 ++++- .../eclipse/jetty/servlet/ServletHandler.java | 2 +- .../org/eclipse/jetty/servlet/ServletHolder.java | 16 ++++++++++++++++ .../webapp/StandardDescriptorProcessor.java | 10 +++++----- 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletContextHandler.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletContextHandler.java index d6aeaad2974..e07f805a07c 100644 --- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletContextHandler.java +++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletContextHandler.java @@ -506,7 +506,10 @@ public class ServletContextHandler extends ContextHandler public RequestDispatcher getNamedDispatcher(String name) { ContextHandler context=org.eclipse.jetty.servlet.ServletContextHandler.this; - if (_servletHandler==null || _servletHandler.getServlet(name)==null) + if (_servletHandler==null) + return null; + ServletHolder holder = _servletHandler.getServlet(name); + if (holder==null || !holder.isEnabled()) return null; return new Dispatcher(context, name); } diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java index a427e78aed9..ebad1b26a95 100644 --- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java +++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java @@ -1191,7 +1191,7 @@ public class ServletHandler extends ScopedHandler ServletHolder servlet_holder = (ServletHolder)_servletNameMap.get(_servletMappings[i].getServletName()); if (servlet_holder==null) throw new IllegalStateException("No such servlet: "+_servletMappings[i].getServletName()); - else if (_servletMappings[i].getPathSpecs()!=null) + else if (servlet_holder.isEnabled() && _servletMappings[i].getPathSpecs()!=null) { String[] pathSpecs = _servletMappings[i].getPathSpecs(); for (int j=0;j implements UserIdentity.Scope private transient Servlet _servlet; private transient Config _config; private transient long _unavailable; + private transient boolean _enabled = true; private transient UnavailableException _unavailableEx; public static final Map NO_MAPPED_ROLES = Collections.emptyMap(); @@ -246,11 +247,26 @@ public class ServletHolder extends Holder implements UserIdentity.Scope _forcedPath = forcedPath; } + public boolean isEnabled() + { + return _enabled; + } + + + public void setEnabled(boolean enabled) + { + _enabled = enabled; + } + + /* ------------------------------------------------------------ */ public void doStart() throws Exception { _unavailable=0; + if (!_enabled) + return; + try { super.doStart(); diff --git a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/StandardDescriptorProcessor.java b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/StandardDescriptorProcessor.java index 13e359aab43..745137cfb43 100644 --- a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/StandardDescriptorProcessor.java +++ b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/StandardDescriptorProcessor.java @@ -513,15 +513,14 @@ public class StandardDescriptorProcessor extends IterativeDescriptorProcessor String enabled = node.getString("enabled", false, true); if (enabled!=null) { - boolean is_enabled = enabled.length()==0||Boolean.valueOf(enabled); - // TODO handle enabled? + boolean is_enabled = enabled.length()==0||Boolean.valueOf(enabled); Origin o = context.getMetaData().getOrigin(servlet_name+".servlet.enabled"); switch (o) { case NotSet: { //hasn't been set yet, so set it - //TODO + holder.setEnabled(is_enabled); context.getMetaData().setOrigin(servlet_name+".servlet.enabled", descriptor); break; } @@ -532,7 +531,7 @@ public class StandardDescriptorProcessor extends IterativeDescriptorProcessor //was set in a web xml descriptor, only allow override from another web xml descriptor if (!(descriptor instanceof FragmentDescriptor)) { - //TODO + holder.setEnabled(is_enabled); context.getMetaData().setOrigin(servlet_name+".servlet.enabled", descriptor); } break; @@ -540,7 +539,8 @@ public class StandardDescriptorProcessor extends IterativeDescriptorProcessor case WebFragment: { //was set by another fragment, this fragment's value must match - //TODO + if (holder.isEnabled() != is_enabled) + throw new IllegalStateException("Conflicting value of servlet enabled for servlet "+servlet_name+" in "+descriptor.getResource()); break; } }