[Patch] Review request - bug 7147060 com/sun/org/apache/xml/internal/security/transforms/ClassLoaderTest.java doesn't run in agentvm mode
Eric Wang
yiming.wang at oracle.com
Thu Jul 5 08:18:37 UTC 2012
Hi David & Stuart,
Can you please help to review the fix for the bug 7147060
<http://monaco.us.oracle.com/detail.jsf?cr=7147060>, Thanks you!
The test reports ClassNotFoundException which is caused by below reasons:
1. Class can be found in "test.classes" instead of "test.src".
2. In agentvm mode, the MyTransform.class is loaded by the child of the
context ClassLoader of current thread, however, The method
Transform.register(String, String) tries to use context ClassLoader to
load class MyTransform.class which is not found.
The proposed fix is:
1. Replace "test.src" to "test.classes".
2. Replace the current thread ClassLoader to its child.
Regards,
Eric
-------------- next part --------------
--- old/test/ProblemList.txt 2012-07-05 15:57:49.477164126 +0800
+++ new/test/ProblemList.txt 2012-07-05 15:57:45.177070426 +0800
@@ -290,9 +290,6 @@
# 7177556
com/sun/crypto/provider/KeyFactory/TestProviderLeak.java generic-all
-# 7147060
-com/sun/org/apache/xml/internal/security/transforms/ClassLoaderTest.java generic-all
-
# Failing on Solaris i586, 3/9/2010, not a -samevm issue (jdk_security3)
sun/security/pkcs11/Secmod/AddPrivateKey.java solaris-i586
sun/security/pkcs11/ec/ReadCertificates.java generic-all
-------------- next part --------------
--- old/test/com/sun/org/apache/xml/internal/security/transforms/ClassLoaderTest.java 2012-07-05 15:57:56.799140287 +0800
+++ new/test/com/sun/org/apache/xml/internal/security/transforms/ClassLoaderTest.java 2012-07-05 15:57:54.790043435 +0800
@@ -39,7 +39,7 @@
public class ClassLoaderTest {
- private final static String BASE = System.getProperty("test.src", "./");
+ private final static String BASE = System.getProperty("test.classes", "./");
public static void main(String[] args) throws Exception {
@@ -50,15 +50,26 @@
URLClassLoader ucl = new URLClassLoader(urls);
Class c = ucl.loadClass("MyTransform");
Constructor cons = c.getConstructor();
- Object o = cons.newInstance();
- // Apache code swallows the ClassNotFoundExc, so we need to
- // check if the Transform has already been registered by registering
- // it again and catching an AlgorithmAlreadyRegisteredExc
+
+ Thread curThread = Thread.currentThread();
+ ClassLoader ctxLoader = curThread.getContextClassLoader();
+ ClassLoader loader = MyTransform.class.getClassLoader();
try {
+ // In agentvm mode, the class MyTransform is loaded by the child of
+ // context ClassLoader of this thread. Replace context ClassLoader
+ // with its child to avoid ClassNotFoundException thrown from
+ // Transform.register(String, String) method.
+ curThread.setContextClassLoader(loader);
+ Object o = cons.newInstance();
+ // Apache code swallows the ClassNotFoundExc, so we need to
+ // check if the Transform has already been registered by registering
+ // it again and catching an AlgorithmAlreadyRegisteredExc
Transform.register(MyTransform.URI, "MyTransform");
throw new Exception("ClassLoaderTest failed");
} catch (AlgorithmAlreadyRegisteredException e) {
// test passed
+ } finally {
+ curThread.setContextClassLoader(ctxLoader);
}
}
}
More information about the core-libs-dev
mailing list