You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by mu...@apache.org on 2007/07/12 22:06:13 UTC
svn commit: r555739 - in
/xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig: AppA.java
AppB.java ClassLoaderTest.java
Author: mullan
Date: Thu Jul 12 13:06:12 2007
New Revision: 555739
URL: http://svn.apache.org/viewvc?view=rev&rev=555739
Log:
Regression test for bug 42820: ClassLoader issue causing NoSuchAlgorithmException loading Provider Implementation
Added:
xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/AppA.java
xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/AppB.java
Modified:
xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/ClassLoaderTest.java
Added: xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/AppA.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/AppA.java?view=auto&rev=555739
==============================================================================
--- xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/AppA.java (added)
+++ xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/AppA.java Thu Jul 12 13:06:12 2007
@@ -0,0 +1,14 @@
+package javax.xml.crypto.test.dsig;
+
+import java.security.Security;
+
+/**
+ * Used by ClassLoaderTest
+ */
+public class AppA {
+
+ public void dsig() throws Exception {
+
+ Security.addProvider(new org.jcp.xml.dsig.internal.dom.XMLDSigRI());
+ }
+}
Added: xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/AppB.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/AppB.java?view=auto&rev=555739
==============================================================================
--- xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/AppB.java (added)
+++ xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/AppB.java Thu Jul 12 13:06:12 2007
@@ -0,0 +1,18 @@
+package javax.xml.crypto.test.dsig;
+
+import java.security.Provider;
+import java.security.Security;
+import javax.xml.crypto.dsig.Transform;
+import javax.xml.crypto.dsig.TransformService;
+
+/**
+ * Used by ClassLoaderTest
+ */
+public class AppB {
+
+ public void dsig() throws Exception {
+
+ Provider p = Security.getProvider("XMLDSig");
+ TransformService ts = TransformService.getInstance(Transform.XPATH, "DOM", p);
+ }
+}
Modified: xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/ClassLoaderTest.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/ClassLoaderTest.java?view=diff&rev=555739&r1=555738&r2=555739
==============================================================================
--- xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/ClassLoaderTest.java (original)
+++ xml/security/trunk/src_unitTests/javax/xml/crypto/test/dsig/ClassLoaderTest.java Thu Jul 12 13:06:12 2007
@@ -4,6 +4,12 @@
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
+import java.security.AccessController;
+import java.security.Provider;
+import java.security.Security;
+
+import javax.xml.crypto.dsig.CanonicalizationMethod;
+import org.jcp.xml.dsig.internal.dom.XMLDSigRI;
import junit.framework.*;
@@ -32,6 +38,70 @@
Class c1 = uc1.loadClass("javax.xml.crypto.test.dsig.Driver");
Class c2 = uc2.loadClass("javax.xml.crypto.test.dsig.Driver");
+ Object o1 = c1.newInstance();
+ Object o2 = c2.newInstance();
+ Method m1 = c1.getMethod("dsig", (Class[]) null);
+ Method m2 = c2.getMethod("dsig", (Class[]) null);
+ m1.invoke(o1, (Object[]) null);
+ m2.invoke(o2, (Object[]) null);
+ }
+
+ public void test_provider_multiple_loaders() throws Exception {
+ String baseDir = System.getProperty("basedir");
+ String fs = System.getProperty("file.separator");
+ File file0 = new File(baseDir + fs + "build" + fs + "classes" + fs);
+ File file1 = new File(baseDir + fs + "build" + fs + "test" + fs);
+ URL[] urls = new URL[2];
+ urls[0] = file0.toURL();
+ urls[1] = file1.toURL();
+
+ URLClassLoader uc1 = new URLClassLoader(urls, null);
+ //load security provider using current class loader
+ final Provider provider = new XMLDSigRI();
+ AccessController.doPrivileged(new java.security.PrivilegedAction() {
+ public Object run() {
+ Security.addProvider(provider);
+ return null;
+ }
+ });
+ // get the provider from java.security.Security using URLClassLoader.
+ // Need to use introspection to invoke methods to avoid using the
+ // current class loader
+ String factoryName = "javax.xml.crypto.dsig.XMLSignatureFactory";
+ Class factoryClass = uc1.loadClass(factoryName);
+ Method factoryMethod = factoryClass.getDeclaredMethod
+ ("getInstance", new Class[]{String.class});
+ Class methodParameterClass = uc1.loadClass
+ ("javax.xml.crypto.dsig.spec.C14NMethodParameterSpec");
+ Method canonicalizationMethod = factoryClass.getDeclaredMethod
+ ("newCanonicalizationMethod",
+ new Class[]{String.class,methodParameterClass});
+ Object factory = factoryMethod.invoke(null, new Object[]{"DOM"});
+ long start = System.currentTimeMillis();
+ for (int i=0; i<100; i++) {
+ canonicalizationMethod.invoke
+ (factory, new Object[]{CanonicalizationMethod.EXCLUSIVE,null});
+ }
+ long end = System.currentTimeMillis();
+ long elapsed = end-start;
+ System.out.println("Elapsed:"+elapsed);
+ System.out.println("dsig succeeded");
+ }
+
+ public void test_provider_multiple_loaders_two() throws Exception {
+
+ String baseDir = System.getProperty("basedir");
+ String fs = System.getProperty("file.separator");
+ File file0 = new File(baseDir + fs + "build" + fs + "classes" + fs);
+ File file1 = new File(baseDir + fs + "build" + fs + "test" + fs);
+ URL[] urls = new URL[2];
+ urls[0] = file0.toURL();
+ urls[1] = file1.toURL();
+ URLClassLoader uc1 = new URLClassLoader(urls, null);
+ URLClassLoader uc2 = new URLClassLoader(urls, null);
+
+ Class c1 = uc1.loadClass("javax.xml.crypto.test.dsig.AppA");
+ Class c2 = uc2.loadClass("javax.xml.crypto.test.dsig.AppB");
Object o1 = c1.newInstance();
Object o2 = c2.newInstance();
Method m1 = c1.getMethod("dsig", (Class[]) null);