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 2014/11/17 08:48:39 UTC

svn commit: r1640087 - in /tomcat/tc8.0.x/trunk: ./ java/org/apache/catalina/loader/LocalStrings.properties java/org/apache/catalina/loader/WebappClassLoaderBase.java webapps/docs/changelog.xml

Author: markt
Date: Mon Nov 17 07:48:39 2014
New Revision: 1640087

URL: http://svn.apache.org/r1640087
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=57172
Provide a better error message if an attempt is made access a resource through a web application class loader that has been stopped.

Modified:
    tomcat/tc8.0.x/trunk/   (props changed)
    tomcat/tc8.0.x/trunk/java/org/apache/catalina/loader/LocalStrings.properties
    tomcat/tc8.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
    tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml

Propchange: tomcat/tc8.0.x/trunk/
------------------------------------------------------------------------------
  Merged /tomcat/trunk:r1640084

Modified: tomcat/tc8.0.x/trunk/java/org/apache/catalina/loader/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/catalina/loader/LocalStrings.properties?rev=1640087&r1=1640086&r2=1640087&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/java/org/apache/catalina/loader/LocalStrings.properties (original)
+++ tomcat/tc8.0.x/trunk/java/org/apache/catalina/loader/LocalStrings.properties Mon Nov 17 07:48:39 2014
@@ -1,4 +1,4 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
+[# Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
@@ -17,7 +17,7 @@ webappClassLoader.addPermisionNoCanonica
 webappClassLoader.addPermisionNoProtocol=The protocol [{0}] in the URL [{1}] is not supported so no read permission was granted for resources located at this URL
 webappClassLoader.illegalJarPath=Illegal JAR entry detected with name {0}
 webappClassLoader.jdbcRemoveFailed=JDBC driver de-registration failed for web application [{0}]
-webappClassLoader.stopped=Illegal access: this web application instance has been stopped already.  Could not load {0}.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
+webappClassLoader.stopped=Illegal access: this web application instance has been stopped already. Could not load [{0}]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
 webappClassLoader.readError=Resource read error: Could not load {0}.
 webappClassLoader.clearJdbc=The web application [{0}] registered the JDBC driver [{1}] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
 webappClassLoader.clearReferencesResourceBundlesCount=Removed [{0}] ResourceBundle references from the cache for web application [{1}]

Modified: tomcat/tc8.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
URL: http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java?rev=1640087&r1=1640086&r2=1640087&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java (original)
+++ tomcat/tc8.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java Mon Nov 17 07:48:39 2014
@@ -917,6 +917,8 @@ public abstract class WebappClassLoaderB
         if (log.isDebugEnabled())
             log.debug("    findResource(" + name + ")");
 
+        checkStateForResourceLoading(name);
+
         URL url = null;
 
         String path = nameToPath(name);
@@ -965,6 +967,8 @@ public abstract class WebappClassLoaderB
         if (log.isDebugEnabled())
             log.debug("    findResources(" + name + ")");
 
+        checkStateForResourceLoading(name);
+
         LinkedHashSet<URL> result = new LinkedHashSet<>();
 
         String path = nameToPath(name);
@@ -1015,6 +1019,9 @@ public abstract class WebappClassLoaderB
 
         if (log.isDebugEnabled())
             log.debug("getResource(" + name + ")");
+
+        checkStateForResourceLoading(name);
+
         URL url = null;
 
         // (1) Delegate to parent if requested
@@ -1069,6 +1076,9 @@ public abstract class WebappClassLoaderB
 
         if (log.isDebugEnabled())
             log.debug("getResourceAsStream(" + name + ")");
+
+        checkStateForResourceLoading(name);
+
         InputStream stream = null;
 
         // (0) Check for a cached copy of this resource
@@ -1299,17 +1309,27 @@ public abstract class WebappClassLoaderB
     protected void checkStateForClassLoading(String className) throws ClassNotFoundException {
         // It is not permitted to load new classes once the web application has
         // been stopped.
-        if (!state.isAvailable()) {
-            String msg = sm.getString("webappClassLoader.stopped", className);
-            IllegalStateException cause = new IllegalStateException(msg);
+        try {
+            checkStateForResourceLoading(className);
+        } catch (IllegalStateException ise) {
             ClassNotFoundException cnfe = new ClassNotFoundException();
-            cnfe.initCause(cause);
-            log.info(msg, cnfe);
+            cnfe.initCause(ise);
             throw cnfe;
         }
     }
 
 
+    protected void checkStateForResourceLoading(String resource) throws IllegalStateException {
+        // It is not permitted to load resources once the web application has
+        // been stopped.
+        if (!state.isAvailable()) {
+            String msg = sm.getString("webappClassLoader.stopped", resource);
+            IllegalStateException ise = new IllegalStateException(msg);
+            log.info(msg, ise);
+            throw ise;
+        }
+    }
+
     /**
      * Get the Permissions for a CodeSource.  If this instance
      * of WebappClassLoaderBase is for a web application context,

Modified: tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml?rev=1640087&r1=1640086&r2=1640087&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml Mon Nov 17 07:48:39 2014
@@ -48,6 +48,11 @@
   <subsection name="Catalina">
     <changelog>
       <fix>
+        <bug>57172</bug>: Provide a better error message if an attempt is made
+        access a resource through a web application class loader that has been
+        stopped. (markt)
+      </fix>
+      <fix>
         <bug>57187</bug>: Regression handling the special * URL. (remm)
       </fix>
       <fix>



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