+ sanitize class names (eliminate trailing .class for dot notation)

This commit is contained in:
Costin Leau 2010-04-28 10:33:54 +00:00
parent 03415960ff
commit 02cc37cc16
1 changed files with 6 additions and 4 deletions

View File

@ -22,7 +22,6 @@ import java.lang.reflect.Modifier;
import org.apache.catalina.loader.ResourceEntry; import org.apache.catalina.loader.ResourceEntry;
import org.apache.catalina.loader.WebappClassLoader; import org.apache.catalina.loader.WebappClassLoader;
import org.springframework.instrument.classloading.WeavingTransformer; import org.springframework.instrument.classloading.WeavingTransformer;
/** /**
@ -58,6 +57,7 @@ import org.springframework.instrument.classloading.WeavingTransformer;
*/ */
public class TomcatInstrumentableClassLoader extends WebappClassLoader { public class TomcatInstrumentableClassLoader extends WebappClassLoader {
private static final String CLASS_SUFFIX = ".class";
/** Use an internal WeavingTransformer */ /** Use an internal WeavingTransformer */
private final WeavingTransformer weavingTransformer; private final WeavingTransformer weavingTransformer;
@ -112,8 +112,10 @@ public class TomcatInstrumentableClassLoader extends WebappClassLoader {
protected ResourceEntry findResourceInternal(String name, String path) { protected ResourceEntry findResourceInternal(String name, String path) {
ResourceEntry entry = super.findResourceInternal(name, path); ResourceEntry entry = super.findResourceInternal(name, path);
// Postpone String parsing as much as possible (it is slow). // Postpone String parsing as much as possible (it is slow).
if (entry != null && entry.binaryContent != null && path.endsWith(".class")) { if (entry != null && entry.binaryContent != null && path.endsWith(CLASS_SUFFIX)) {
byte[] transformed = this.weavingTransformer.transformIfNecessary(name, entry.binaryContent); String className = (name.endsWith(CLASS_SUFFIX) ? name.substring(0, name.length() - CLASS_SUFFIX.length())
: name);
byte[] transformed = this.weavingTransformer.transformIfNecessary(className, entry.binaryContent);
entry.binaryContent = transformed; entry.binaryContent = transformed;
} }
return entry; return entry;
@ -128,7 +130,7 @@ public class TomcatInstrumentableClassLoader extends WebappClassLoader {
} }
// The code below is orginially taken from ReflectionUtils and optimized for // The code below is originally taken from ReflectionUtils and optimized for
// local usage. There is no dependency on ReflectionUtils to keep this class // local usage. There is no dependency on ReflectionUtils to keep this class
// self-contained (since it gets deployed into Tomcat's server class loader). // self-contained (since it gets deployed into Tomcat's server class loader).