This commit broke all default webapps (ROOT, examples, docs). a 404 is returned instead...
On 8 oct. 2010, at 23:37, ma...@apache.org wrote: > Author: markt > Date: Fri Oct 8 21:37:19 2010 > New Revision: 1006033 > > URL: http://svn.apache.org/viewvc?rev=1006033&view=rev > Log: > Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50059 > Always make JAR resources available > > Modified: > tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java > tomcat/trunk/webapps/docs/changelog.xml > > 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=1006033&r1=1006032&r2=1006033&view=diff > ============================================================================== > --- tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java > (original) > +++ tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java Fri Oct > 8 21:37:19 2010 > @@ -1214,7 +1214,7 @@ public class ContextConfig > webXmlVersion = Double.parseDouble(webXml.getVersion()); > } > > - if (webXmlVersion >= 3 && !webXml.isMetadataComplete()) { > + if (webXmlVersion >= 3) { > // Ordering is important here > > // Step 1. Identify all the JARs packaged with the application > @@ -1222,67 +1222,78 @@ public class ContextConfig > // point. > Map<String,WebXml> fragments = processJarsForWebFragments(); > > - // Step 2. Order the fragments. > - Set<WebXml> orderedFragments = > - WebXml.orderWebFragments(webXml, fragments); > - > - // Step 3. Look for ServletContainerInitializer implementations > - ok = processServletContainerInitializers(orderedFragments); > - > - // Step 4. Process /WEB-INF/classes for annotations > - // This will add any matching classes to the typeInitializerMap > - if (ok) { > - URL webinfClasses; > - try { > - webinfClasses = > - > context.getServletContext().getResource("/WEB-INF/classes"); > - processAnnotationsUrl(webinfClasses, webXml); > - } catch (MalformedURLException e) { > - > log.error(sm.getString("contextConfig.webinfClassesUrl"), e); > + // Only need to process fragments and annotations if metadata is > + // not complete > + Set<WebXml> orderedFragments = null; > + if (!webXml.isMetadataComplete()) { > + // Step 2. Order the fragments. > + orderedFragments = WebXml.orderWebFragments(webXml, > fragments); > + > + // Step 3. Look for ServletContainerInitializer > implementations > + ok = processServletContainerInitializers(orderedFragments); > + > + // Step 4. Process /WEB-INF/classes for annotations > + // This will add any matching classes to the > typeInitializerMap > + if (ok) { > + URL webinfClasses; > + try { > + webinfClasses = > context.getServletContext().getResource( > + "/WEB-INF/classes"); > + processAnnotationsUrl(webinfClasses, webXml); > + } catch (MalformedURLException e) { > + log.error(sm.getString( > + "contextConfig.webinfClassesUrl"), e); > + } > } > - } > - > - // Step 5. Process JARs for annotations - only need to process > those > - // fragments we are going to use > - // This will add any matching classes to the typeInitializerMap > - if (ok) { > - processAnnotations(orderedFragments); > - } > - > - // Step 6. Merge web-fragment.xml files into the main web.xml > file. > - if (ok) { > - ok = webXml.merge(orderedFragments); > - } > - > - // Step 6.5 Convert explicitly mentioned jsps to servlets > - if (!false) { > - convertJsps(webXml); > - } > - > - // Step 7. Apply merged web.xml to Context > - if (ok) { > - webXml.configureContext(context); > - > - // Step 7a. Make the merged web.xml available to other > - // components, specifically Jasper, to save those components > - // from having to re-generate it. > - // TODO Use a ServletContainerInitializer for Jasper > - String mergedWebXml = webXml.toXml(); > - context.getServletContext().setAttribute( > - org.apache.tomcat.util.scan.Constants.MERGED_WEB_XML, > - mergedWebXml); > - if (context.getLogEffectiveWebXml()) { > - log.info("web.xml:\n" + mergedWebXml); > + > + // Step 5. Process JARs for annotations - only need to > process > + // those fragments we are going to use > + // This will add any matching classes to the > typeInitializerMap > + if (ok) { > + processAnnotations(orderedFragments); > + } > + > + // Step 6. Merge web-fragment.xml files into the main web.xml > + // file. > + if (ok) { > + ok = webXml.merge(orderedFragments); > + } > + > + // Step 6.5 Convert explicitly mentioned jsps to servlets > + if (!false) { > + convertJsps(webXml); > + } > + > + // Step 7. Apply merged web.xml to Context > + if (ok) { > + webXml.configureContext(context); > + > + // Step 7a. Make the merged web.xml available to other > + // components, specifically Jasper, to save those > components > + // from having to re-generate it. > + // TODO Use a ServletContainerInitializer for Jasper > + String mergedWebXml = webXml.toXml(); > + context.getServletContext().setAttribute( > + > org.apache.tomcat.util.scan.Constants.MERGED_WEB_XML, > + mergedWebXml); > + if (context.getLogEffectiveWebXml()) { > + log.info("web.xml:\n" + mergedWebXml); > + } > } > + } else { > + ok = true; > } > > + // Always need to look for static resources > // Step 8. Look for static resources packaged in JARs > if (ok) { > // Spec does not define an order. > // Use ordered JARs followed by remaining JARs > Set<WebXml> resourceJars = new LinkedHashSet<WebXml>(); > - for (WebXml fragment : orderedFragments) { > - resourceJars.add(fragment); > + if (orderedFragments != null) { > + for (WebXml fragment : orderedFragments) { > + resourceJars.add(fragment); > + } > } > for (WebXml fragment : fragments.values()) { > if (!resourceJars.contains(fragment)) { > @@ -1292,17 +1303,22 @@ public class ContextConfig > processResourceJARs(resourceJars); > } > > - // Step 9. Apply the ServletContainerInitializer config to the > - // context > - if (ok) { > - for (Map.Entry<ServletContainerInitializer,Set<Class<?>>> > entry : > - initializerClassMap.entrySet()) { > - if (entry.getValue().isEmpty()) { > - > context.addServletContainerInitializer(entry.getKey(), > - null); > - } else { > - > context.addServletContainerInitializer(entry.getKey(), > - entry.getValue()); > + // Only look for ServletContainerInitializer if metadata is not > + // complete > + if (!webXml.isMetadataComplete()) { > + // Step 9. Apply the ServletContainerInitializer config to > the > + // context > + if (ok) { > + for (Map.Entry<ServletContainerInitializer, > + Set<Class<?>>> entry : > + initializerClassMap.entrySet()) { > + if (entry.getValue().isEmpty()) { > + context.addServletContainerInitializer( > + entry.getKey(), null); > + } else { > + context.addServletContainerInitializer( > + entry.getKey(), entry.getValue()); > + } > } > } > } > > Modified: tomcat/trunk/webapps/docs/changelog.xml > URL: > http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1006033&r1=1006032&r2=1006033&view=diff > ============================================================================== > --- tomcat/trunk/webapps/docs/changelog.xml (original) > +++ tomcat/trunk/webapps/docs/changelog.xml Fri Oct 8 21:37:19 2010 > @@ -103,6 +103,10 @@ > <bug>50017</bug>: Code clean-up. No functional change. Patch provided > by > sebb. (markt) > </update> > + <fix> > + <bug>50059</bug>: JARs should always be searched for static resources > + even if the web application is marked as meta-data complete. (markt) > + </fix> > </changelog> > </subsection> > <subsection name="Coyote"> > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org > For additional commands, e-mail: dev-h...@tomcat.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org