Author: rjung Date: Wed Feb 7 11:54:45 2018 New Revision: 1823460 URL: http://svn.apache.org/viewvc?rev=1823460&view=rev Log: BZ58143: Fix calling classloading transformers broken in 7.0.70 by the fix for BZ59619. This was observed when using Spring weaving.
Partial backport of r1730946, follow on to r1745608. Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java?rev=1823460&r1=1823459&r2=1823460&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java Wed Feb 7 11:54:45 2018 @@ -3075,6 +3075,28 @@ public abstract class WebappClassLoaderB if (entry.binaryContent == null) throw new ClassNotFoundException(name); + if (this.transformers.size() > 0) { + // If the resource is a class just being loaded, decorate it + // with any attached transformers + String className = name.endsWith(CLASS_FILE_SUFFIX) ? + name.substring(0, name.length() - CLASS_FILE_SUFFIX.length()) : name; + String internalName = className.replace(".", "/"); + + for (ClassFileTransformer transformer : this.transformers) { + try { + byte[] transformed = transformer.transform( + this, internalName, null, null, entry.binaryContent + ); + if (transformed != null) { + entry.binaryContent = transformed; + } + } catch (IllegalClassFormatException e) { + log.error(sm.getString("webappClassLoader.transformError", name), e); + return null; + } + } + } + // Looking up the package String packageName = null; int pos = name.lastIndexOf('.'); @@ -3477,29 +3499,6 @@ public abstract class WebappClassLoaderB } } } - - if (isClassResource && entry.binaryContent != null && - this.transformers.size() > 0) { - // If the resource is a class just being loaded, decorate it - // with any attached transformers - String className = name.endsWith(CLASS_FILE_SUFFIX) ? - name.substring(0, name.length() - CLASS_FILE_SUFFIX.length()) : name; - String internalName = className.replace(".", "/"); - - for (ClassFileTransformer transformer : this.transformers) { - try { - byte[] transformed = transformer.transform( - this, internalName, null, null, entry.binaryContent - ); - if (transformed != null) { - entry.binaryContent = transformed; - } - } catch (IllegalClassFormatException e) { - log.error(sm.getString("webappClassLoader.transformError", name), e); - return null; - } - } - } // Add the entry in the local resource repository synchronized (resourceEntries) { Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1823460&r1=1823459&r2=1823460&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Wed Feb 7 11:54:45 2018 @@ -72,6 +72,11 @@ (remm) </fix> <fix> + <bug>58143</bug>: Fix calling classloading transformers broken in 7.0.70 + by the fix for <bug>59619</bug>. This was observed when using Spring + weaving. (rjung) + </fix> + <fix> <bug>62000</bug>: When a JNDI reference cannot be resolved, ensure that the root cause exception is reported rather than swallowed. (markt) </fix> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org