Author: markt
Date: Sat Apr 3 12:41:31 2010
New Revision: 930514
URL: http://svn.apache.org/viewvc?rev=930514&view=rev
Log:
TCK failures: If a servlet/filter has any mappings in the main web.xml, these
override rather than replace the mappings defined in the fragments. The same
goes for fragments and annotations.
Modified:
tomcat/trunk/java/org/apache/catalina/deploy/WebXml.java
tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java
Modified: tomcat/trunk/java/org/apache/catalina/deploy/WebXml.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/deploy/WebXml.java?rev=930514&r1=930513&r2=930514&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/deploy/WebXml.java (original)
+++ tomcat/trunk/java/org/apache/catalina/deploy/WebXml.java Sat Apr 3
12:41:31 2010
@@ -272,8 +272,10 @@ public class WebXml {
// filter-mapping
private Set<FilterMap> filterMaps = new LinkedHashSet<FilterMap>();
+ private Set<String> filterMappingNames = new HashSet<String>();
public void addFilterMapping(FilterMap filterMap) {
filterMaps.add(filterMap);
+ filterMappingNames.add(filterMap.getFilterName());
}
public Set<FilterMap> getFilterMappings() { return filterMaps; }
@@ -301,8 +303,10 @@ public class WebXml {
// servlet-mapping
private Map<String,String> servletMappings = new HashMap<String,String>();
+ private Set<String> servletMappingNames = new HashSet<String>();
public void addServletMapping(String urlPattern, String servletName) {
servletMappings.put(urlPattern, servletName);
+ servletMappingNames.add(servletName);
}
public Map<String,String> getServletMappings() { return servletMappings; }
@@ -1407,9 +1411,22 @@ public class WebXml {
}
errorPages.putAll(temp.getErrorPages());
+ // As per 'clarification' from the Servlet EG, filter mappings in the
+ // main web.xml override those in fragments and those in fragments
+ // override mappings in annotations
+ for (WebXml fragment : fragments) {
+ Iterator<FilterMap> iterFilterMaps =
+ fragment.getFilterMappings().iterator();
+ while (iterFilterMaps.hasNext()) {
+ FilterMap filterMap = iterFilterMaps.next();
+ if (filterMappingNames.contains(filterMap.getFilterName())) {
+ iterFilterMaps.remove();
+ }
+ }
+ }
for (WebXml fragment : fragments) {
for (FilterMap filterMap : fragment.getFilterMappings()) {
- // Always additive
+ // Additive
addFilterMapping(filterMap);
}
}
@@ -1550,10 +1567,23 @@ public class WebXml {
serviceRefs.putAll(temp.getServiceRefs());
mergeInjectionFlags.clear();
+ // As per 'clarification' from the Servlet EG, servlet mappings in the
+ // main web.xml override those in fragments and those in fragments
+ // override mappings in annotations
+ for (WebXml fragment : fragments) {
+ Iterator<Map.Entry<String,String>> iterServletMaps =
+ fragment.getServletMappings().entrySet().iterator();
+ while (iterServletMaps.hasNext()) {
+ Map.Entry<String,String> servletMap = iterServletMaps.next();
+ if (servletMappingNames.contains(servletMap.getValue())) {
+ iterServletMaps.remove();
+ }
+ }
+ }
for (WebXml fragment : fragments) {
for (Map.Entry<String,String> mapping :
fragment.getServletMappings().entrySet()) {
- // Always additive
+ // Additive
addServletMapping(mapping.getKey(), mapping.getValue());
}
}
Modified: tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java?rev=930514&r1=930513&r2=930514&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java Sat Apr 3
12:41:31 2010
@@ -32,6 +32,7 @@ import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
@@ -1210,7 +1211,7 @@ public class ContextConfig
// Have to process JARs for fragments
Map<String,WebXml> fragments = processJarsForWebFragments();
- // Merge the fragments into the main web.xml
+ // Order the fragments
Set<WebXml> orderedFragments =
WebXml.orderWebFragments(webXml, fragments);
@@ -1454,8 +1455,13 @@ public class ContextConfig
protected void processAnnotations(Set<WebXml> fragments) {
for(WebXml fragment : fragments) {
if (!fragment.isMetadataComplete()) {
+ WebXml annotations = new WebXml();
URL url = fragment.getURL();
- processAnnotationsUrl(url, fragment);
+ processAnnotationsUrl(url, annotations);
+ Set<WebXml> set = new HashSet<WebXml>();
+ set.add(annotations);
+ // Merge annotations into fragment - fragment takes priority
+ fragment.merge(set);
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]