Author: markt Date: Fri Jun 14 14:14:00 2013 New Revision: 1493080 URL: http://svn.apache.org/r1493080 Log: Always process container JARs for SCIs Order of SCI processing for container JARs compared to web application JARs should be the same as class loading order.
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=1493080&r1=1493079&r2=1493080&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/deploy/WebXml.java (original) +++ tomcat/trunk/java/org/apache/catalina/deploy/WebXml.java Fri Jun 14 14:14:00 2013 @@ -600,12 +600,13 @@ public class WebXml { // Is this JAR part of the application or is it a container JAR? Assume it // is. private boolean webappJar = true; - public void setWebappJar(boolean webappJar) { - this.webappJar = webappJar; - } - public boolean getWebappJar() { - return webappJar; - } + public void setWebappJar(boolean webappJar) { this.webappJar = webappJar; } + public boolean getWebappJar() { return webappJar; } + + // Does this web application delegate first for class loading? + private boolean delegate = false; + public boolean getDelegate() { return delegate; } + public void setDelegate(boolean delegate) { this.delegate = delegate; } @Override public String toString() { @@ -2109,9 +2110,21 @@ public class WebXml { orderFragments(orderedFragments, afterSet); } + // Container fragments are always included + Set<WebXml> containerFragments = new LinkedHashSet<>(); + // Find all the container fragments and remove any present from the + // ordered list + for (WebXml fragment : fragments.values()) { + if (!fragment.getWebappJar()) { + containerFragments.add(fragment); + orderedFragments.remove(fragment); + } + } + // Avoid NPE when unit testing if (servletContext != null) { - // Publish the ordered fragments + // Publish the ordered fragments. The app does not need to know + // about container fragments List<String> orderedJarFileNames = null; if (orderingPresent) { orderedJarFileNames = new ArrayList<>(); @@ -2123,7 +2136,21 @@ public class WebXml { orderedJarFileNames); } - return orderedFragments; + // The remainder of the processing needs to know about container + // fragments + if (containerFragments.size() > 0) { + Set<WebXml> result = new LinkedHashSet<>(); + if (containerFragments.iterator().next().getDelegate()) { + result.addAll(containerFragments); + result.addAll(orderedFragments); + } else { + result.addAll(orderedFragments); + result.addAll(containerFragments); + } + return result; + } else { + return orderedFragments; + } } private static void decoupleOtherGroups(Set<WebXml> group) { 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=1493080&r1=1493079&r2=1493080&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java (original) +++ tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java Fri Jun 14 14:14:00 2013 @@ -2737,6 +2737,9 @@ public class ContextConfig implements Li WebXml fragment = new WebXml(); fragment.setWebappJar(isWebapp); + if (context instanceof StandardContext) { + fragment.setDelegate(((StandardContext) context).getDelegate()); + } try { // Only web application JARs are checked for web-fragment.xml --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org