// 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; }
// 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; }
}
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);
}
}
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());
}
}
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;
// 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);
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);
}
}
}