You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2010/05/16 00:52:19 UTC

svn commit: r944739 - /tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java

Author: markt
Date: Sat May 15 22:52:18 2010
New Revision: 944739

URL: http://svn.apache.org/viewvc?rev=944739&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=49290
Allow Tomcat to start when using a JarScanner with scanAllDirectories=true
Patch by Larry Issacs (with minor tweaks)

Modified:
    tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java

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=944739&r1=944738&r2=944739&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java Sat May 15 22:52:18 2010
@@ -107,6 +107,9 @@ public class ContextConfig
     implements LifecycleListener {
 
     private static final Log log = LogFactory.getLog( ContextConfig.class );
+    
+    private static final String SCI_LOCATION =
+        "META-INF/services/javax.servlet.ServletContainerInitializer";
 
     // ----------------------------------------------------- Instance Variables
 
@@ -1293,23 +1296,32 @@ public class ContextConfig
             Set<WebXml> fragments) {
         
         for (WebXml fragment : fragments) {
-            URL jarUrl = fragment.getURL();
+            URL url = fragment.getURL();
             JarFile jarFile = null;
             InputStream is = null;
             ServletContainerInitializer sci = null;
             try {
-                JarURLConnection conn =
-                    (JarURLConnection) jarUrl.openConnection();
-                jarFile = conn.getJarFile();   
-                ZipEntry entry = jarFile.getEntry(
-                        "META-INF/services/javax.servlet.ServletContainerInitializer");
-                if (entry != null) {
-                    is = jarFile.getInputStream(entry);
+                if ("jar".equals(url.getProtocol())) {
+                    JarURLConnection conn =
+                        (JarURLConnection) url.openConnection();
+                    jarFile = conn.getJarFile();
+                    ZipEntry entry = jarFile.getEntry(SCI_LOCATION);
+                    if (entry != null) {
+                        is = jarFile.getInputStream(entry);
+                    }
+                } else if ("file".equals(url.getProtocol())) {
+                    String path = url.getPath();
+                    File file = new File(path, SCI_LOCATION);
+                    if (file.exists()) {
+                        is = new FileInputStream(file);
+                    }
+                }
+                if (is != null) {
                     sci = getServletContainerInitializer(is);
                 }
             } catch (IOException ioe) {
                 log.error(sm.getString(
-                        "contextConfig.servletContainerInitializerFail", jarUrl,
+                        "contextConfig.servletContainerInitializerFail", url,
                         context.getPath()));
                 return false;
             } finally {
@@ -1412,18 +1424,21 @@ public class ContextConfig
      */
     protected void processResourceJARs(Set<WebXml> fragments) {
         for (WebXml fragment : fragments) {
-            URL jarUrl = fragment.getURL();
+            URL url = fragment.getURL();
             JarFile jarFile = null;
             try {
-                JarURLConnection conn =
-                    (JarURLConnection) jarUrl.openConnection();
-                jarFile = conn.getJarFile();   
-                ZipEntry entry = jarFile.getEntry("META-INF/resources/");
-                if (entry != null) {
-                    context.addResourceJarUrl(jarUrl);
+                // Note: Ignore file URLs for now since only jar URLs will be accepted
+                if ("jar".equals(url.getProtocol())) {
+                    JarURLConnection conn =
+                        (JarURLConnection) url.openConnection();
+                    jarFile = conn.getJarFile();   
+                    ZipEntry entry = jarFile.getEntry("META-INF/resources/");
+                    if (entry != null) {
+                        context.addResourceJarUrl(url);
+                    }
                 }
             } catch (IOException ioe) {
-                log.error(sm.getString("contextConfig.resourceJarFail", jarUrl,
+                log.error(sm.getString("contextConfig.resourceJarFail", url,
                         context.getPath()));
             } finally {
                 if (jarFile != null) {



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org