Author: markt
Date: Wed Feb 19 17:01:46 2014
New Revision: 1569818

URL: http://svn.apache.org/r1569818
Log:
Update tests to check correct handling elements added between 2.5 and 3.0.

Modified:
    tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebXml.java
    tomcat/trunk/test/org/apache/tomcat/util/descriptor/web/TestWebXml.java

Modified: tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebXml.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebXml.java?rev=1569818&r1=1569817&r2=1569818&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebXml.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebXml.java Wed Feb 
19 17:01:46 2014
@@ -30,6 +30,7 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 
+import javax.servlet.DispatcherType;
 import javax.servlet.ServletContext;
 import javax.servlet.SessionTrackingMode;
 import javax.servlet.descriptor.JspConfigDescriptor;
@@ -722,8 +723,11 @@ public class WebXml {
                         filterDef.getFilterName());
                 appendElement(sb, INDENT4, "filter-class",
                         filterDef.getFilterClass());
-                appendElement(sb, INDENT4, "async-supported",
-                        filterDef.getAsyncSupported());
+                // Async support was introduced for Servlet 3.0 onwards
+                if (getMajorVersion() != 2) {
+                    appendElement(sb, INDENT4, "async-supported",
+                            filterDef.getAsyncSupported());
+                }
                 for (Map.Entry<String, String> param :
                         filterDef.getParameterMap().entrySet()) {
                     sb.append("    <init-param>\n");
@@ -756,6 +760,10 @@ public class WebXml {
                 // dispatcher was added in Servlet 2.4
                 if (getMajorVersion() > 2 || getMinorVersion() > 3) {
                     for (String dispatcher : filterMap.getDispatcherNames()) {
+                        if (getMajorVersion() == 2 &&
+                                
DispatcherType.ASYNC.name().equals(dispatcher)) {
+                            continue;
+                        }
                         appendElement(sb, INDENT4, "dispatcher", dispatcher);
                     }
                 }
@@ -795,8 +803,11 @@ public class WebXml {
             appendElement(sb, INDENT4, "load-on-startup",
                     servletDef.getLoadOnStartup());
             appendElement(sb, INDENT4, "enabled", servletDef.getEnabled());
-            appendElement(sb, INDENT4, "async-supported",
-                    servletDef.getAsyncSupported());
+            // Async support was introduced for Servlet 3.0 onwards
+            if (getMajorVersion() != 2) {
+                appendElement(sb, INDENT4, "async-supported",
+                        servletDef.getAsyncSupported());
+            }
             // servlet/run-as was introduced in Servlet 2.3
             if (getMajorVersion() > 2 || getMinorVersion() > 2) {
                 if (servletDef.getRunAs() != null) {
@@ -811,18 +822,21 @@ public class WebXml {
                 appendElement(sb, INDENT6, "role-link", roleRef.getLink());
                 sb.append("    </security-role-ref>\n");
             }
-            MultipartDef multipartDef = servletDef.getMultipartDef();
-            if (multipartDef != null) {
-                sb.append("    <multipart-config>\n");
-                appendElement(sb, INDENT6, "location",
-                        multipartDef.getLocation());
-                appendElement(sb, INDENT6, "max-file-size",
-                        multipartDef.getMaxFileSize());
-                appendElement(sb, INDENT6, "max-request-size",
-                        multipartDef.getMaxRequestSize());
-                appendElement(sb, INDENT6, "file-size-threshold",
-                        multipartDef.getFileSizeThreshold());
-                sb.append("    </multipart-config>\n");
+            // multipart-config was added in Servlet 3.0
+            if (getMajorVersion() != 2) {
+                MultipartDef multipartDef = servletDef.getMultipartDef();
+                if (multipartDef != null) {
+                    sb.append("    <multipart-config>\n");
+                    appendElement(sb, INDENT6, "location",
+                            multipartDef.getLocation());
+                    appendElement(sb, INDENT6, "max-file-size",
+                            multipartDef.getMaxFileSize());
+                    appendElement(sb, INDENT6, "max-request-size",
+                            multipartDef.getMaxRequestSize());
+                    appendElement(sb, INDENT6, "file-size-threshold",
+                            multipartDef.getFileSizeThreshold());
+                    sb.append("    </multipart-config>\n");
+                }
             }
             sb.append("  </servlet>\n");
         }
@@ -880,13 +894,19 @@ public class WebXml {
         }
 
         for (ErrorPage errorPage : errorPages.values()) {
+            String exeptionType = errorPage.getExceptionType();
+            int errorCode = errorPage.getErrorCode();
+
+            if (exeptionType == null && errorCode == 0 && getMajorVersion() == 
2) {
+                // Default error pages are only supported from 3.0 onwards
+                continue;
+            }
             sb.append("  <error-page>\n");
-            if (errorPage.getExceptionType() == null) {
+            if (errorPage.getExceptionType() != null) {
+                appendElement(sb, INDENT4, "exception-type", exeptionType);
+            } else if (errorPage.getErrorCode() > 0) {
                 appendElement(sb, INDENT4, "error-code",
-                        Integer.toString(errorPage.getErrorCode()));
-            } else {
-                appendElement(sb, INDENT4, "exception-type",
-                        errorPage.getExceptionType());
+                        Integer.toString(errorCode));
             }
             appendElement(sb, INDENT4, "location", errorPage.getLocation());
             sb.append("  </error-page>\n");

Modified: 
tomcat/trunk/test/org/apache/tomcat/util/descriptor/web/TestWebXml.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/util/descriptor/web/TestWebXml.java?rev=1569818&r1=1569817&r2=1569818&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/util/descriptor/web/TestWebXml.java 
(original)
+++ tomcat/trunk/test/org/apache/tomcat/util/descriptor/web/TestWebXml.java Wed 
Feb 19 17:01:46 2014
@@ -183,8 +183,6 @@ public class TestWebXml {
         XmlErrorHandler handler = new XmlErrorHandler();
         digester.setErrorHandler(handler);
 
-        // System.out.print(webxml.toXml() + "\n\n\n");
-
         InputSource is = new InputSource(new StringReader(webxml.toXml()));
         WebXml webxmlResult = new WebXml();
         digester.push(webxmlResult);
@@ -315,6 +313,31 @@ public class TestWebXml {
         // listener-[description|display-name|icon] added in Servlet 2.4
         // None of these are supported in WebXml
 
+        // filter-mapping/dispatcher/ASYNC added in Servlet 3.0
+        filterMap.setDispatcher("ASYNC");
+
+        // error-page with just location allowed in Servlet 3.0+
+        ErrorPage errorPage = new ErrorPage();
+        errorPage.setLocation("/dummy");
+        webXmlDefaultFragment.addErrorPage(errorPage);
+
+        // async-supported added to Servlet and Filter in 3.0
+        filterDef.setAsyncSupported("false");
+        servletDef.setAsyncSupported("false");
+
+        // session-cookie-config added in 3.0
+        SessionConfig sessionConfig = new SessionConfig();
+        sessionConfig.setCookieDomain("dummy");
+        webXmlDefaultFragment.setSessionConfig(sessionConfig);
+
+        // http-method-omission added in Servlet 3.0
+        // Let this trigger a validation error as dropping it silently could
+        // be a security concern
+
+        // multi-part-config added in Servlet 3.0
+        MultipartDef multiPart = new MultipartDef();
+        servletDef.setMultipartDef(multiPart);
+
         return webXmlDefaultFragment;
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to