From: markt Date: Tue, 29 Dec 2009 14:13:24 +0000 (+0000) Subject: Add support for the enabled attribute for servlets in web.xml X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=4514e746c0c838bc20e24d07b187a3be42f411c2;p=tomcat7.0 Add support for the enabled attribute for servlets in web.xml git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@894393 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/catalina/Wrapper.java b/java/org/apache/catalina/Wrapper.java index fbefbd3c2..6880c95e0 100644 --- a/java/org/apache/catalina/Wrapper.java +++ b/java/org/apache/catalina/Wrapper.java @@ -360,4 +360,15 @@ public interface Wrapper extends Container { * Set the async support for the associated servlet. */ public void setAsyncSupported(boolean asyncSupport); + + /** + * Is the associated Servlet enabled? Defaults to true. + */ + public boolean isEnabled(); + + /** + * Sets the enabled attribute for the associated servlet. + */ + public void setEnabled(boolean enabled); + } diff --git a/java/org/apache/catalina/core/StandardWrapper.java b/java/org/apache/catalina/core/StandardWrapper.java index 5b8843443..b112c64c6 100644 --- a/java/org/apache/catalina/core/StandardWrapper.java +++ b/java/org/apache/catalina/core/StandardWrapper.java @@ -267,6 +267,11 @@ public class StandardWrapper protected boolean asyncSupported = true; /** + * Enabled + */ + protected boolean enabled = true; + + /** * Static class array used when the SecurityManager is turned on and * Servlet.init is invoked. */ @@ -586,13 +591,15 @@ public class StandardWrapper */ public boolean isUnavailable() { - if (available == 0L) - return (false); + if (!isEnabled()) + return true; + else if (available == 0L) + return false; else if (available <= System.currentTimeMillis()) { available = 0L; - return (false); + return false; } else - return (true); + return true; } @@ -1516,6 +1523,14 @@ public class StandardWrapper this.asyncSupported = asyncSupported; } + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + // -------------------------------------------------------- Package Methods diff --git a/java/org/apache/catalina/deploy/ServletDef.java b/java/org/apache/catalina/deploy/ServletDef.java index 94134d304..881b4ef7a 100644 --- a/java/org/apache/catalina/deploy/ServletDef.java +++ b/java/org/apache/catalina/deploy/ServletDef.java @@ -234,4 +234,18 @@ public class ServletDef implements Serializable { public void setAsyncSupported(String asyncSupported) { this.asyncSupported = Boolean.valueOf(asyncSupported); } + + + /** + * Is this servlet enabled. + */ + private Boolean enabled = null; + + public Boolean getEnabled() { + return this.enabled; + } + + public void setEnabled(String enabled) { + this.enabled = Boolean.valueOf(enabled); + } } diff --git a/java/org/apache/catalina/startup/WebRuleSet.java b/java/org/apache/catalina/startup/WebRuleSet.java index ae44c48bd..41c7129b4 100644 --- a/java/org/apache/catalina/startup/WebRuleSet.java +++ b/java/org/apache/catalina/startup/WebRuleSet.java @@ -390,7 +390,9 @@ public class WebRuleSet extends RuleSetBase { "setFileSizeThreshold", 0); digester.addCallMethod(fullPrefix + "/servlet/async-supported", - "setAsyncSupported", 0); + "setAsyncSupported", 0); + digester.addCallMethod(fullPrefix + "/servlet/enabled", + "setEnabled", 0); digester.addRule(fullPrefix + "/servlet-mapping", diff --git a/java/org/apache/catalina/startup/WebXml.java b/java/org/apache/catalina/startup/WebXml.java index 09108628d..aba9b6fe3 100644 --- a/java/org/apache/catalina/startup/WebXml.java +++ b/java/org/apache/catalina/startup/WebXml.java @@ -583,7 +583,7 @@ public class WebXml { } appendElement(sb, INDENT4, "load-on-startup", servletDef.getLoadOnStartup()); - // TODO enabled + appendElement(sb, INDENT4, "enabled", servletDef.getEnabled()); appendElement(sb, INDENT4, "async-supported", servletDef.getAsyncSupported()); sb.append(" \n"); @@ -1108,6 +1108,9 @@ public class WebXml { if (servlet.getLoadOnStartup() != null) { wrapper.setLoadOnStartup(servlet.getLoadOnStartup().intValue()); } + if (servlet.getEnabled() != null) { + wrapper.setEnabled(servlet.getEnabled().booleanValue()); + } wrapper.setName(servlet.getServletName()); Map params = servlet.getParameterMap(); for (String param : params.keySet()) { @@ -1604,6 +1607,15 @@ public class WebXml { } } + if (dest.getEnabled() == null) { + dest.setEnabled(src.getEnabled().toString()); + } else if (src.getEnabled() != null) { + if (failOnConflict && + !src.getEnabled().equals(dest.getEnabled())) { + return false; + } + } + for (Map.Entry srcEntry : src.getParameterMap().entrySet()) { if (dest.getParameterMap().containsKey(srcEntry.getKey())) {