464438 ClassFileTransformer support in org.eclipse.jetty.webapp.WebAppClassLoader broken
diff --git a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/WebAppClassLoader.java b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/WebAppClassLoader.java
index 0862143..0bd3d93 100644
--- a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/WebAppClassLoader.java
+++ b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/WebAppClassLoader.java
@@ -518,10 +518,14 @@
try
{
content = url.openStream();
- byte[] bytes =IO.readBytes(content);
+ byte[] bytes = IO.readBytes(content);
for (ClassFileTransformer transformer : _transformers)
- bytes=transformer.transform(this,name,null,null,bytes);
+ {
+ byte[] tmp = transformer.transform(this,name,null,null,bytes);
+ if (tmp != null)
+ bytes = tmp;
+ }
clazz=defineClass(name,bytes,0,bytes.length);
}
diff --git a/jetty-webapp/src/test/java/org/eclipse/jetty/webapp/WebAppClassLoaderTest.java b/jetty-webapp/src/test/java/org/eclipse/jetty/webapp/WebAppClassLoaderTest.java
index 3ec8e2b..49011ab 100644
--- a/jetty-webapp/src/test/java/org/eclipse/jetty/webapp/WebAppClassLoaderTest.java
+++ b/jetty-webapp/src/test/java/org/eclipse/jetty/webapp/WebAppClassLoaderTest.java
@@ -137,7 +137,22 @@
assertEquals(_loader,iter.next());
assertEquals("org.acme.other.ClassInClassesC",iter.next());
assertFalse(iter.hasNext());
-
+ }
+
+ @Test
+ public void testNullClassFileTransformer () throws Exception
+ {
+ _loader.addTransformer(new ClassFileTransformer()
+ {
+ public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer)
+ throws IllegalClassFormatException
+ {
+ return null;
+ }
+ });
+
+
+ assertTrue(canLoadClass("org.acme.webapp.ClassInJarA"));
}
@Test