Add support for the enabled attribute for servlets in web.xml
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Tue, 29 Dec 2009 14:13:24 +0000 (14:13 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Tue, 29 Dec 2009 14:13:24 +0000 (14:13 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@894393 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/Wrapper.java
java/org/apache/catalina/core/StandardWrapper.java
java/org/apache/catalina/deploy/ServletDef.java
java/org/apache/catalina/startup/WebRuleSet.java
java/org/apache/catalina/startup/WebXml.java

index fbefbd3..6880c95 100644 (file)
@@ -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 <code>true</code>.
+     */
+    public boolean isEnabled();
+    
+    /**
+     * Sets the enabled attribute for the associated servlet.
+     */
+    public void setEnabled(boolean enabled);
+
 }
index 5b88434..b112c64 100644 (file)
@@ -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 
      * <code>Servlet.init</code> 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
 
 
index 94134d3..881b4ef 100644 (file)
@@ -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);
+    }
 }
index ae44c48..41c7129 100644 (file)
@@ -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",
index 0910862..aba9b6f 100644 (file)
@@ -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("    <run-as>\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<String,String> 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<String,String> srcEntry :
                 src.getParameterMap().entrySet()) {
             if (dest.getParameterMap().containsKey(srcEntry.getKey())) {