Author: markt
Date: Thu Feb 20 10:21:04 2014
New Revision: 1570130

URL: http://svn.apache.org/r1570130
Log:
Update tests to check correct handling of all elements added between 2.3 and 
2.4.

Modified:
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/WebXml.java
    tomcat/tc7.0.x/trunk/test/org/apache/catalina/deploy/TestWebXml.java

Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/WebXml.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/WebXml.java?rev=1570130&r1=1570129&r2=1570130&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/WebXml.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/WebXml.java Thu Feb 20 
10:21:04 2014
@@ -597,6 +597,11 @@ public class WebXml {
         // NOTE - Elements need to be written in the order defined in the 2.3
         //        DTD else validation of the merged web.xml will fail
 
+        // NOTE - Some elements need to be skipped based on the version of the
+        //        specification being used. Version is validated and starts at
+        //        2.2. The version tests used in this method take advantage of
+        //        this.
+
         // Declaration
         sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
 
@@ -662,8 +667,6 @@ public class WebXml {
         sb.append('\n');
 
         // Filters were introduced in Servlet 2.3
-        // Note versions are validated and start at 2.2 so this test takes that
-        // into account
         if (getMajorVersion() > 2 || getMinorVersion() > 2) {
             for (Map.Entry<String, FilterDef> entry : filters.entrySet()) {
                 FilterDef filterDef = entry.getValue();
@@ -707,8 +710,11 @@ public class WebXml {
                         appendElement(sb, INDENT4, "url-pattern", urlPattern);
                     }
                 }
-                for (String dispatcher : filterMap.getDispatcherNames()) {
-                    appendElement(sb, INDENT4, "dispatcher", dispatcher);
+                // dispatcher was added in Servlet 2.4
+                if (getMajorVersion() > 2 || getMinorVersion() > 3) {
+                    for (String dispatcher : filterMap.getDispatcherNames()) {
+                        appendElement(sb, INDENT4, "dispatcher", dispatcher);
+                    }
                 }
                 sb.append("  </filter-mapping>\n");
             }
@@ -716,8 +722,6 @@ public class WebXml {
         }
 
         // Listeners were introduced in Servlet 2.3
-        // Note versions are validated and start at 2.2 so this test takes that
-        // into account
         if (getMajorVersion() > 2 || getMinorVersion() > 2) {
             for (String listener : listeners) {
                 sb.append("  <listener>\n");
@@ -751,8 +755,6 @@ public class WebXml {
             appendElement(sb, INDENT4, "async-supported",
                     servletDef.getAsyncSupported());
             // servlet/run-as was introduced in Servlet 2.3
-            // Note versions are validated and start at 2.2 so this test takes 
that
-            // into account
             if (getMajorVersion() > 2 || getMinorVersion() > 2) {
                 if (servletDef.getRunAs() != null) {
                     sb.append("    <run-as>\n");
@@ -848,48 +850,52 @@ public class WebXml {
         }
         sb.append('\n');
 
+        // jsp-config was added in Servlet 2.4. Prior to that, tag-libs was 
used
+        // directly and jsp-property-group did not exist
         if (taglibs.size() > 0 || jspPropertyGroups.size() > 0) {
-            sb.append("  <jsp-config>\n");
+            if (getMajorVersion() > 2 || getMinorVersion() > 3) {
+                sb.append("  <jsp-config>\n");
+            }
             for (Map.Entry<String, String> entry : taglibs.entrySet()) {
                 sb.append("    <taglib>\n");
                 appendElement(sb, INDENT6, "taglib-uri", entry.getKey());
                 appendElement(sb, INDENT6, "taglib-location", 
entry.getValue());
                 sb.append("    </taglib>\n");
             }
-            for (JspPropertyGroup jpg : jspPropertyGroups) {
-                sb.append("    <jsp-property-group>\n");
-                for (String urlPattern : jpg.getUrlPatterns()) {
-                    appendElement(sb, INDENT6, "url-pattern", urlPattern);
+            if (getMajorVersion() > 2 || getMinorVersion() > 3) {
+                for (JspPropertyGroup jpg : jspPropertyGroups) {
+                    sb.append("    <jsp-property-group>\n");
+                    for (String urlPattern : jpg.getUrlPatterns()) {
+                        appendElement(sb, INDENT6, "url-pattern", urlPattern);
+                    }
+                    appendElement(sb, INDENT6, "el-ignored", 
jpg.getElIgnored());
+                    appendElement(sb, INDENT6, "page-encoding",
+                            jpg.getPageEncoding());
+                    appendElement(sb, INDENT6, "scripting-invalid",
+                            jpg.getScriptingInvalid());
+                    appendElement(sb, INDENT6, "is-xml", jpg.getIsXml());
+                    for (String prelude : jpg.getIncludePreludes()) {
+                        appendElement(sb, INDENT6, "include-prelude", prelude);
+                    }
+                    for (String coda : jpg.getIncludeCodas()) {
+                        appendElement(sb, INDENT6, "include-coda", coda);
+                    }
+                    appendElement(sb, INDENT6, 
"deferred-syntax-allowed-as-literal",
+                            jpg.getDeferredSyntax());
+                    appendElement(sb, INDENT6, "trim-directive-whitespaces",
+                            jpg.getTrimWhitespace());
+                    appendElement(sb, INDENT6, "default-content-type",
+                            jpg.getDefaultContentType());
+                    appendElement(sb, INDENT6, "buffer", jpg.getBuffer());
+                    appendElement(sb, INDENT6, "error-on-undeclared-namespace",
+                            jpg.getErrorOnUndeclaredNamespace());
+                    sb.append("    </jsp-property-group>\n");
                 }
-                appendElement(sb, INDENT6, "el-ignored", jpg.getElIgnored());
-                appendElement(sb, INDENT6, "page-encoding",
-                        jpg.getPageEncoding());
-                appendElement(sb, INDENT6, "scripting-invalid",
-                        jpg.getScriptingInvalid());
-                appendElement(sb, INDENT6, "is-xml", jpg.getIsXml());
-                for (String prelude : jpg.getIncludePreludes()) {
-                    appendElement(sb, INDENT6, "include-prelude", prelude);
-                }
-                for (String coda : jpg.getIncludeCodas()) {
-                    appendElement(sb, INDENT6, "include-coda", coda);
-                }
-                appendElement(sb, INDENT6, 
"deferred-syntax-allowed-as-literal",
-                        jpg.getDeferredSyntax());
-                appendElement(sb, INDENT6, "trim-directive-whitespaces",
-                        jpg.getTrimWhitespace());
-                appendElement(sb, INDENT6, "default-content-type",
-                        jpg.getDefaultContentType());
-                appendElement(sb, INDENT6, "buffer", jpg.getBuffer());
-                appendElement(sb, INDENT6, "error-on-undeclared-namespace",
-                        jpg.getErrorOnUndeclaredNamespace());
-                sb.append("    </jsp-property-group>\n");
+                sb.append("  </jsp-config>\n\n");
             }
-            sb.append("  </jsp-config>\n\n");
         }
 
         // resource-env-ref was introduced in Servlet 2.3
-        // Note versions are validated and start at 2.2 so this test takes that
-        // into account
         if (getMajorVersion() > 2 || getMinorVersion() > 2) {
             for (ContextResourceEnvRef resourceEnvRef : 
resourceEnvRefs.values()) {
                 sb.append("  <resource-env-ref>\n");
@@ -923,8 +929,6 @@ public class WebXml {
             appendElement(sb, INDENT4, "res-type", resourceRef.getType());
             appendElement(sb, INDENT4, "res-auth", resourceRef.getAuth());
             // resource-ref/res-sharing-scope was introduced in Servlet 2.3
-            // Note versions are validated and start at 2.2 so this test takes
-            // that into account
             if (getMajorVersion() > 2 || getMinorVersion() > 2) {
                 appendElement(sb, INDENT4, "res-sharing-scope",
                         resourceRef.getScope());
@@ -946,8 +950,6 @@ public class WebXml {
         for (SecurityConstraint constraint : securityConstraints) {
             sb.append("  <security-constraint>\n");
             // security-constraint/display-name was introduced in Servlet 2.3
-            // Note versions are validated and start at 2.2 so this test takes
-            // that into account
             if (getMajorVersion() > 2 || getMinorVersion() > 2) {
                 appendElement(sb, INDENT4, "display-name",
                         constraint.getDisplayName());
@@ -1054,8 +1056,6 @@ public class WebXml {
         sb.append('\n');
 
         // ejb-local-ref was introduced in Servlet 2.3
-        // Note versions are validated and start at 2.2 so this test takes that
-        // into account
         if (getMajorVersion() > 2 || getMinorVersion() > 2) {
             for (ContextLocalEjb ejbLocalRef : ejbLocalRefs.values()) {
                 sb.append("  <ejb-local-ref>\n");
@@ -1081,61 +1081,64 @@ public class WebXml {
             sb.append('\n');
         }
 
-        for (ContextService serviceRef : serviceRefs.values()) {
-            sb.append("  <service-ref>\n");
-            appendElement(sb, INDENT4, "description",
-                    serviceRef.getDescription());
-            appendElement(sb, INDENT4, "display-name",
-                    serviceRef.getDisplayname());
-            appendElement(sb, INDENT4, "service-ref-name",
-                    serviceRef.getName());
-            appendElement(sb, INDENT4, "service-interface",
-                    serviceRef.getInterface());
-            appendElement(sb, INDENT4, "service-ref-type",
-                    serviceRef.getType());
-            appendElement(sb, INDENT4, "wsdl-file", serviceRef.getWsdlfile());
-            appendElement(sb, INDENT4, "jaxrpc-mapping-file",
-                    serviceRef.getJaxrpcmappingfile());
-            String qname = serviceRef.getServiceqnameNamespaceURI();
-            if (qname != null) {
-                qname = qname + ":";
-            }
-            qname = qname + serviceRef.getServiceqnameLocalpart();
-            appendElement(sb, INDENT4, "service-qname", qname);
-            Iterator<String> endpointIter = serviceRef.getServiceendpoints();
-            while (endpointIter.hasNext()) {
-                String endpoint = endpointIter.next();
-                sb.append("    <port-component-ref>\n");
-                appendElement(sb, INDENT6, "service-endpoint-interface",
-                        endpoint);
-                appendElement(sb, INDENT6, "port-component-link",
-                        serviceRef.getProperty(endpoint));
-                sb.append("    </port-component-ref>\n");
-            }
-            Iterator<String> handlerIter = serviceRef.getHandlers();
-            while (handlerIter.hasNext()) {
-                String handler = handlerIter.next();
-                sb.append("    <handler>\n");
-                ContextHandler ch = serviceRef.getHandler(handler);
-                appendElement(sb, INDENT6, "handler-name", ch.getName());
-                appendElement(sb, INDENT6, "handler-class",
-                        ch.getHandlerclass());
-                sb.append("    </handler>\n");
-            }
-            // TODO handler-chains
-            // TODO mapped-name
-            for (InjectionTarget target : serviceRef.getInjectionTargets()) {
-                sb.append("    <injection-target>\n");
-                appendElement(sb, INDENT6, "injection-target-class",
-                        target.getTargetClass());
-                appendElement(sb, INDENT6, "injection-target-name",
-                        target.getTargetName());
-                sb.append("    </injection-target>\n");
+        // service-ref was introduced in Servlet 2.4
+        if (getMajorVersion() > 2 || getMinorVersion() > 3) {
+            for (ContextService serviceRef : serviceRefs.values()) {
+                sb.append("  <service-ref>\n");
+                appendElement(sb, INDENT4, "description",
+                        serviceRef.getDescription());
+                appendElement(sb, INDENT4, "display-name",
+                        serviceRef.getDisplayname());
+                appendElement(sb, INDENT4, "service-ref-name",
+                        serviceRef.getName());
+                appendElement(sb, INDENT4, "service-interface",
+                        serviceRef.getInterface());
+                appendElement(sb, INDENT4, "service-ref-type",
+                        serviceRef.getType());
+                appendElement(sb, INDENT4, "wsdl-file", 
serviceRef.getWsdlfile());
+                appendElement(sb, INDENT4, "jaxrpc-mapping-file",
+                        serviceRef.getJaxrpcmappingfile());
+                String qname = serviceRef.getServiceqnameNamespaceURI();
+                if (qname != null) {
+                    qname = qname + ":";
+                }
+                qname = qname + serviceRef.getServiceqnameLocalpart();
+                appendElement(sb, INDENT4, "service-qname", qname);
+                Iterator<String> endpointIter = 
serviceRef.getServiceendpoints();
+                while (endpointIter.hasNext()) {
+                    String endpoint = endpointIter.next();
+                    sb.append("    <port-component-ref>\n");
+                    appendElement(sb, INDENT6, "service-endpoint-interface",
+                            endpoint);
+                    appendElement(sb, INDENT6, "port-component-link",
+                            serviceRef.getProperty(endpoint));
+                    sb.append("    </port-component-ref>\n");
+                }
+                Iterator<String> handlerIter = serviceRef.getHandlers();
+                while (handlerIter.hasNext()) {
+                    String handler = handlerIter.next();
+                    sb.append("    <handler>\n");
+                    ContextHandler ch = serviceRef.getHandler(handler);
+                    appendElement(sb, INDENT6, "handler-name", ch.getName());
+                    appendElement(sb, INDENT6, "handler-class",
+                            ch.getHandlerclass());
+                    sb.append("    </handler>\n");
+                }
+                // TODO handler-chains
+                // TODO mapped-name
+                for (InjectionTarget target : 
serviceRef.getInjectionTargets()) {
+                    sb.append("    <injection-target>\n");
+                    appendElement(sb, INDENT6, "injection-target-class",
+                            target.getTargetClass());
+                    appendElement(sb, INDENT6, "injection-target-name",
+                            target.getTargetName());
+                    sb.append("    </injection-target>\n");
+                }
+                // TODO lookup-name
+                sb.append("  </service-ref>\n");
             }
-            // TODO lookup-name
-            sb.append("  </service-ref>\n");
+            sb.append('\n');
         }
-        sb.append('\n');
 
         if (!postConstructMethods.isEmpty()) {
             for (Entry<String, String> entry : postConstructMethods
@@ -1163,53 +1166,61 @@ public class WebXml {
             sb.append('\n');
         }
 
-        for (MessageDestinationRef mdr : messageDestinationRefs.values()) {
-            sb.append("  <message-destination-ref>\n");
-            appendElement(sb, INDENT4, "description", mdr.getDescription());
-            appendElement(sb, INDENT4, "message-destination-ref-name",
-                    mdr.getName());
-            appendElement(sb, INDENT4, "message-destination-type",
-                    mdr.getType());
-            appendElement(sb, INDENT4, "message-destination-usage",
-                    mdr.getUsage());
-            appendElement(sb, INDENT4, "message-destination-link",
-                    mdr.getLink());
-            // TODO mapped-name
-            for (InjectionTarget target : mdr.getInjectionTargets()) {
-                sb.append("    <injection-target>\n");
-                appendElement(sb, INDENT6, "injection-target-class",
-                        target.getTargetClass());
-                appendElement(sb, INDENT6, "injection-target-name",
-                        target.getTargetName());
-                sb.append("    </injection-target>\n");
+        // message-destination-ref, message-destination were introduced in
+        // Servlet 2.4
+        if (getMajorVersion() > 2 || getMinorVersion() > 3) {
+            for (MessageDestinationRef mdr : messageDestinationRefs.values()) {
+                sb.append("  <message-destination-ref>\n");
+                appendElement(sb, INDENT4, "description", 
mdr.getDescription());
+                appendElement(sb, INDENT4, "message-destination-ref-name",
+                        mdr.getName());
+                appendElement(sb, INDENT4, "message-destination-type",
+                        mdr.getType());
+                appendElement(sb, INDENT4, "message-destination-usage",
+                        mdr.getUsage());
+                appendElement(sb, INDENT4, "message-destination-link",
+                        mdr.getLink());
+                // TODO mapped-name
+                for (InjectionTarget target : mdr.getInjectionTargets()) {
+                    sb.append("    <injection-target>\n");
+                    appendElement(sb, INDENT6, "injection-target-class",
+                            target.getTargetClass());
+                    appendElement(sb, INDENT6, "injection-target-name",
+                            target.getTargetName());
+                    sb.append("    </injection-target>\n");
+                }
+                // TODO lookup-name
+                sb.append("  </message-destination-ref>\n");
             }
-            // TODO lookup-name
-            sb.append("  </message-destination-ref>\n");
-        }
-        sb.append('\n');
+            sb.append('\n');
 
-        for (MessageDestination md : messageDestinations.values()) {
-            sb.append("  <message-destination>\n");
-            appendElement(sb, INDENT4, "description", md.getDescription());
-            appendElement(sb, INDENT4, "display-name", md.getDisplayName());
-            appendElement(sb, INDENT4, "message-destination-name",
-                    md.getName());
-            // TODO mapped-name
-            sb.append("  </message-destination>\n");
+            for (MessageDestination md : messageDestinations.values()) {
+                sb.append("  <message-destination>\n");
+                appendElement(sb, INDENT4, "description", md.getDescription());
+                appendElement(sb, INDENT4, "display-name", 
md.getDisplayName());
+                appendElement(sb, INDENT4, "message-destination-name",
+                        md.getName());
+                // TODO mapped-name
+                sb.append("  </message-destination>\n");
+            }
+            sb.append('\n');
         }
-        sb.append('\n');
 
-        if (localeEncodingMappings.size() > 0) {
-            sb.append("  <locale-encoding-mapping-list>\n");
-            for (Map.Entry<String, String> entry :
-                    localeEncodingMappings.entrySet()) {
-                sb.append("    <locale-encoding-mapping>\n");
-                appendElement(sb, INDENT6, "locale", entry.getKey());
-                appendElement(sb, INDENT6, "encoding", entry.getValue());
-                sb.append("    </locale-encoding-mapping>\n");
+        // locale-encoding-mapping-list was introduced in Servlet 2.4
+        if (getMajorVersion() > 2 || getMinorVersion() > 3) {
+            if (localeEncodingMappings.size() > 0) {
+                sb.append("  <locale-encoding-mapping-list>\n");
+                for (Map.Entry<String, String> entry :
+                        localeEncodingMappings.entrySet()) {
+                    sb.append("    <locale-encoding-mapping>\n");
+                    appendElement(sb, INDENT6, "locale", entry.getKey());
+                    appendElement(sb, INDENT6, "encoding", entry.getValue());
+                    sb.append("    </locale-encoding-mapping>\n");
+                }
+                sb.append("  </locale-encoding-mapping-list>\n");
             }
-            sb.append("  </locale-encoding-mapping-list>\n");
         }
+
         sb.append("</web-app>");
         return sb.toString();
     }

Modified: tomcat/tc7.0.x/trunk/test/org/apache/catalina/deploy/TestWebXml.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/deploy/TestWebXml.java?rev=1570130&r1=1570129&r2=1570130&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/catalina/deploy/TestWebXml.java 
(original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/catalina/deploy/TestWebXml.java Thu 
Feb 20 10:21:04 2014
@@ -267,6 +267,39 @@ public class TestWebXml {
         sc.addCollection(collection);
         webXmlDefaultFragment.addSecurityConstraint(sc);
 
+        // service-ref was added in 2.4 so should be excluded in 2.3 and 
earlier
+        ContextService serviceRef = new ContextService();
+        serviceRef.setName("dummy");
+        serviceRef.setInterface("dummy");
+        webXmlDefaultFragment.addServiceRef(serviceRef);
+
+        // message-destination-ref was added in 2.4 so should be excluded in 
2.3
+        // and earlier
+        MessageDestinationRef mdRef = new MessageDestinationRef();
+        mdRef.setName("dummy");
+        mdRef.setType("dummy");
+        mdRef.setUsage("Consumes");
+        webXmlDefaultFragment.addMessageDestinationRef(mdRef);
+
+        // message-destination was added in 2.4 so should be excluded in 2.3
+        // and earlier
+        MessageDestination md = new MessageDestination();
+        md.setName("dummy");
+        webXmlDefaultFragment.addMessageDestination(md);
+
+        // local-encoding-mapping-list was added in 2.4 so should be excluded 
in
+        // 2.3 and earlier
+        webXmlDefaultFragment.addLocaleEncodingMapping("en", "UTF-8");
+
+        // jsp-config was added in Servlet 2.4
+        webXmlDefaultFragment.addTaglib("dummy", "dummy");
+
+        // filter-mapping/dispatcher added in Servlet 2.4
+        filterMap.setDispatcher("REQUEST");
+
+        // listener-[description|display-name|icon] added in Servlet 2.4
+        // None of these are supported in WebXml
+
         return webXmlDefaultFragment;
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to