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

Reply via email to