You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2014/02/19 14:22:10 UTC
svn commit: r1569735 - in /tomcat/trunk:
java/org/apache/tomcat/util/descriptor/web/WebXml.java
test/org/apache/tomcat/util/descriptor/web/TestWebXml.java
Author: markt
Date: Wed Feb 19 13:22:10 2014
New Revision: 1569735
URL: http://svn.apache.org/r1569735
Log:
Update tests to check correct handling of all elements added between 2.2 and 2.3.
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=1569735&r1=1569734&r2=1569735&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 13:22:10 2014
@@ -633,6 +633,9 @@ public class WebXml {
// TODO - Various, icon, description etc elements are skipped - mainly
// because they are ignored when web.xml is parsed - see above
+ // NOTE - Elements need to be written in the order defined in the 2.3
+ // DTD else validation of the merged web.xml will fail
+
// Declaration
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
@@ -701,61 +704,71 @@ public class WebXml {
}
sb.append('\n');
- for (Map.Entry<String, FilterDef> entry : filters.entrySet()) {
- FilterDef filterDef = entry.getValue();
- sb.append(" <filter>\n");
- appendElement(sb, INDENT4, "description",
- filterDef.getDescription());
- appendElement(sb, INDENT4, "display-name",
- filterDef.getDisplayName());
- appendElement(sb, INDENT4, "filter-name",
- filterDef.getFilterName());
- appendElement(sb, INDENT4, "filter-class",
- filterDef.getFilterClass());
- appendElement(sb, INDENT4, "async-supported",
- filterDef.getAsyncSupported());
- for (Map.Entry<String, String> param :
- filterDef.getParameterMap().entrySet()) {
- sb.append(" <init-param>\n");
- appendElement(sb, INDENT6, "param-name", param.getKey());
- appendElement(sb, INDENT6, "param-value", param.getValue());
- sb.append(" </init-param>\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();
+ sb.append(" <filter>\n");
+ appendElement(sb, INDENT4, "description",
+ filterDef.getDescription());
+ appendElement(sb, INDENT4, "display-name",
+ filterDef.getDisplayName());
+ appendElement(sb, INDENT4, "filter-name",
+ filterDef.getFilterName());
+ appendElement(sb, INDENT4, "filter-class",
+ filterDef.getFilterClass());
+ appendElement(sb, INDENT4, "async-supported",
+ filterDef.getAsyncSupported());
+ for (Map.Entry<String, String> param :
+ filterDef.getParameterMap().entrySet()) {
+ sb.append(" <init-param>\n");
+ appendElement(sb, INDENT6, "param-name", param.getKey());
+ appendElement(sb, INDENT6, "param-value", param.getValue());
+ sb.append(" </init-param>\n");
+ }
+ sb.append(" </filter>\n");
}
- sb.append(" </filter>\n");
- }
- sb.append('\n');
+ sb.append('\n');
- for (FilterMap filterMap : filterMaps) {
- sb.append(" <filter-mapping>\n");
- appendElement(sb, INDENT4, "filter-name",
- filterMap.getFilterName());
- if (filterMap.getMatchAllServletNames()) {
- sb.append(" <servlet-name>*</servlet-name>\n");
- } else {
- for (String servletName : filterMap.getServletNames()) {
- appendElement(sb, INDENT4, "servlet-name", servletName);
+ for (FilterMap filterMap : filterMaps) {
+ sb.append(" <filter-mapping>\n");
+ appendElement(sb, INDENT4, "filter-name",
+ filterMap.getFilterName());
+ if (filterMap.getMatchAllServletNames()) {
+ sb.append(" <servlet-name>*</servlet-name>\n");
+ } else {
+ for (String servletName : filterMap.getServletNames()) {
+ appendElement(sb, INDENT4, "servlet-name", servletName);
+ }
}
- }
- if (filterMap.getMatchAllUrlPatterns()) {
- sb.append(" <url-pattern>*</url-pattern>\n");
- } else {
- for (String urlPattern : filterMap.getURLPatterns()) {
- appendElement(sb, INDENT4, "url-pattern", urlPattern);
+ if (filterMap.getMatchAllUrlPatterns()) {
+ sb.append(" <url-pattern>*</url-pattern>\n");
+ } else {
+ for (String urlPattern : filterMap.getURLPatterns()) {
+ appendElement(sb, INDENT4, "url-pattern", urlPattern);
+ }
}
+ for (String dispatcher : filterMap.getDispatcherNames()) {
+ appendElement(sb, INDENT4, "dispatcher", dispatcher);
+ }
+ sb.append(" </filter-mapping>\n");
}
- for (String dispatcher : filterMap.getDispatcherNames()) {
- appendElement(sb, INDENT4, "dispatcher", dispatcher);
- }
- sb.append(" </filter-mapping>\n");
+ sb.append('\n');
}
- sb.append('\n');
- for (String listener : listeners) {
- sb.append(" <listener>\n");
- appendElement(sb, INDENT4, "listener-class", listener);
- sb.append(" </listener>\n");
+ // 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");
+ appendElement(sb, INDENT4, "listener-class", listener);
+ sb.append(" </listener>\n");
+ }
+ sb.append('\n');
}
- sb.append('\n');
for (Map.Entry<String, ServletDef> entry : servlets.entrySet()) {
ServletDef servletDef = entry.getValue();
@@ -912,6 +925,57 @@ public class WebXml {
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");
+ appendElement(sb, INDENT4, "description",
+ resourceEnvRef.getDescription());
+ appendElement(sb, INDENT4, "resource-env-ref-name",
+ resourceEnvRef.getName());
+ appendElement(sb, INDENT4, "resource-env-ref-type",
+ resourceEnvRef.getType());
+ // TODO mapped-name
+ for (InjectionTarget target :
+ resourceEnvRef.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(" </resource-env-ref>\n");
+ }
+ sb.append('\n');
+ }
+
+ for (ContextResource resourceRef : resourceRefs.values()) {
+ sb.append(" <resource-ref>\n");
+ appendElement(sb, INDENT4, "description",
+ resourceRef.getDescription());
+ appendElement(sb, INDENT4, "res-ref-name", resourceRef.getName());
+ appendElement(sb, INDENT4, "res-type", resourceRef.getType());
+ appendElement(sb, INDENT4, "res-auth", resourceRef.getAuth());
+ appendElement(sb, INDENT4, "res-sharing-scope",
+ resourceRef.getScope());
+ // TODO mapped-name
+ for (InjectionTarget target : resourceRef.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(" </resource-ref>\n");
+ }
+ sb.append('\n');
+
for (SecurityConstraint constraint : securityConstraints) {
sb.append(" <security-constraint>\n");
appendElement(sb, INDENT4, "display-name",
@@ -1017,28 +1081,33 @@ public class WebXml {
}
sb.append('\n');
- for (ContextLocalEjb ejbLocalRef : ejbLocalRefs.values()) {
- sb.append(" <ejb-local-ref>\n");
- appendElement(sb, INDENT4, "description",
- ejbLocalRef.getDescription());
- appendElement(sb, INDENT4, "ejb-ref-name", ejbLocalRef.getName());
- appendElement(sb, INDENT4, "ejb-ref-type", ejbLocalRef.getType());
- appendElement(sb, INDENT4, "local-home", ejbLocalRef.getHome());
- appendElement(sb, INDENT4, "local", ejbLocalRef.getLocal());
- appendElement(sb, INDENT4, "ejb-link", ejbLocalRef.getLink());
- // TODO mapped-name
- for (InjectionTarget target : ejbLocalRef.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");
+ // 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");
+ appendElement(sb, INDENT4, "description",
+ ejbLocalRef.getDescription());
+ appendElement(sb, INDENT4, "ejb-ref-name", ejbLocalRef.getName());
+ appendElement(sb, INDENT4, "ejb-ref-type", ejbLocalRef.getType());
+ appendElement(sb, INDENT4, "local-home", ejbLocalRef.getHome());
+ appendElement(sb, INDENT4, "local", ejbLocalRef.getLocal());
+ appendElement(sb, INDENT4, "ejb-link", ejbLocalRef.getLink());
+ // TODO mapped-name
+ for (InjectionTarget target : ejbLocalRef.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(" </ejb-local-ref>\n");
}
- // TODO lookup-name
- sb.append(" </ejb-local-ref>\n");
+ sb.append('\n');
}
- sb.append('\n');
for (ContextService serviceRef : serviceRefs.values()) {
sb.append(" <service-ref>\n");
@@ -1096,52 +1165,6 @@ public class WebXml {
}
sb.append('\n');
- for (ContextResource resourceRef : resourceRefs.values()) {
- sb.append(" <resource-ref>\n");
- appendElement(sb, INDENT4, "description",
- resourceRef.getDescription());
- appendElement(sb, INDENT4, "res-ref-name", resourceRef.getName());
- appendElement(sb, INDENT4, "res-type", resourceRef.getType());
- appendElement(sb, INDENT4, "res-auth", resourceRef.getAuth());
- appendElement(sb, INDENT4, "res-sharing-scope",
- resourceRef.getScope());
- // TODO mapped-name
- for (InjectionTarget target : resourceRef.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(" </resource-ref>\n");
- }
- sb.append('\n');
-
- for (ContextResourceEnvRef resourceEnvRef : resourceEnvRefs.values()) {
- sb.append(" <resource-env-ref>\n");
- appendElement(sb, INDENT4, "description",
- resourceEnvRef.getDescription());
- appendElement(sb, INDENT4, "resource-env-ref-name",
- resourceEnvRef.getName());
- appendElement(sb, INDENT4, "resource-env-ref-type",
- resourceEnvRef.getType());
- // TODO mapped-name
- for (InjectionTarget target :
- resourceEnvRef.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(" </resource-env-ref>\n");
- }
- sb.append('\n');
-
if (!postConstructMethods.isEmpty()) {
for (Entry<String, String> entry : postConstructMethods
.entrySet()) {
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=1569735&r1=1569734&r2=1569735&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 13:22:10 2014
@@ -221,6 +221,38 @@ public class TestWebXml {
// Assert that web.xml was parsed and is not empty. Default servlet is known to be there.
Assert.assertNotNull(webXmlDefaultFragment.getServlets().get("default"));
+ // Manually add some version specific features to ensure that these do
+ // not cause problems for the merged web.xml
+
+ // Filters were added in 2.3 so should be excluded in 2.2
+ FilterDef filterDef = new FilterDef();
+ filterDef.setFilterClass("org.apache.tomcat.DummyFilter");
+ filterDef.setFilterName("Dummy");
+ webXmlDefaultFragment.addFilter(filterDef);
+
+ FilterMap filterMap = new FilterMap();
+ filterMap.setFilterName("Dummy");
+ filterMap.addURLPattern("/*");
+ webXmlDefaultFragment.addFilterMapping(filterMap);
+
+ // Listeners were added in 2.3 so should be excluded in 2.2
+ webXmlDefaultFragment.addListener("org.apache.tomcar.DummyListener");
+
+ // resource-env-ref was added in 2.3 so should be excluded in 2.2
+ ContextResourceEnvRef resourceEnvRef = new ContextResourceEnvRef();
+ resourceEnvRef.setName("dummy");
+ resourceEnvRef.setType("dummy");
+
+ webXmlDefaultFragment.addResourceEnvRef(resourceEnvRef);
+
+ // ejb-local-ref was added in 2.3 so should be excluded in 2.2
+ ContextLocalEjb ejbLocalRef = new ContextLocalEjb();
+ ejbLocalRef.setName("dummy");
+ ejbLocalRef.setType("Session");
+ ejbLocalRef.setLocal("dummy");
+ ejbLocalRef.setHome("dummy");
+ webXmlDefaultFragment.addEjbLocalRef(ejbLocalRef);
+
return webXmlDefaultFragment;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org