neilg 2003/02/17 13:43:22
Modified: java/src/org/apache/xerces/util ObjectFactory.java
SecuritySupport.java SecuritySupport12.java
Log:
fix for bug 16674; thanks to Igor Malinin
Revision Changes Path
1.12 +30 -20 xml-xerces/java/src/org/apache/xerces/util/ObjectFactory.java
Index: ObjectFactory.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/util/ObjectFactory.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- ObjectFactory.java 4 Feb 2003 17:00:51 -0000 1.11
+++ ObjectFactory.java 17 Feb 2003 21:43:21 -0000 1.12
@@ -64,9 +64,6 @@
import java.io.BufferedReader;
import java.io.InputStreamReader;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-
/**
* This class is duplicated for each JAXP subpackage so keep it in sync.
* It is package private and therefore is not exposed as part of the JAXP
@@ -294,13 +291,21 @@
// Figure out which ClassLoader to use for loading the provider
// class. If there is a Context ClassLoader then use it.
ClassLoader cl = ss.getContextClassLoader();
- if (cl == null) {
+ if (cl == null || cl == ss.getSystemClassLoader()) {
// Assert: we are on JDK 1.1 or we have no Context ClassLoader
- // so use the current ClassLoader
+ // so use the current ClassLoader or we have default (system)
+ // Context ClassLoader so extend to current ClassLoader (normal
+ // classloader will delegate back to system ClassLoader first)
cl = ObjectFactory.class.getClassLoader();
}
- return cl;
+ if (cl == null) {
+ // Assert: we are on JDK 1.1 or we are on JDK 1.2 and loaded
+ // by bootstrap ClassLoader so extend to System ClassLoader
+ cl = ss.getSystemClassLoader();
+ }
+
+ return cl;
} // findClassLoader():ClassLoader
/**
@@ -352,13 +357,21 @@
} catch (ClassNotFoundException x) {
if (doFallback) {
// Fall back to current classloader
- cl = ObjectFactory.class.getClassLoader();
- providerClass = cl.loadClass(className);
+ ClassLoader current = ObjectFactory.class.getClassLoader();
+ if (current == null) {
+ providerClass = Class.forName(className);
+ } else if (cl != current) {
+ cl = current;
+ providerClass = cl.loadClass(className);
+ } else {
+ throw x;
+ }
} else {
throw x;
}
}
}
+
return providerClass;
}
@@ -375,20 +388,17 @@
InputStream is = null;
// First try the Context ClassLoader
- ClassLoader cl = ss.getContextClassLoader();
- if (cl != null) {
- is = ss.getResourceAsStream(cl, serviceId);
+ ClassLoader cl = findClassLoader();
- // If no provider found then try the current ClassLoader
- if (is == null) {
- cl = ObjectFactory.class.getClassLoader();
+ is = ss.getResourceAsStream(cl, serviceId);
+
+ // If no provider found then try the current ClassLoader
+ if (is == null) {
+ ClassLoader current = ObjectFactory.class.getClassLoader();
+ if (cl != current) {
+ cl = current;
is = ss.getResourceAsStream(cl, serviceId);
}
- } else {
- // No Context ClassLoader or JDK 1.1 so try the current
- // ClassLoader
- cl = ObjectFactory.class.getClassLoader();
- is = ss.getResourceAsStream(cl, serviceId);
}
if (is == null) {
1.3 +4 -2 xml-xerces/java/src/org/apache/xerces/util/SecuritySupport.java
Index: SecuritySupport.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/util/SecuritySupport.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SecuritySupport.java 24 Jan 2003 17:20:11 -0000 1.2
+++ SecuritySupport.java 17 Feb 2003 21:43:21 -0000 1.3
@@ -55,8 +55,6 @@
package org.apache.xerces.util;
-import java.lang.reflect.*;
-import java.net.*;
import java.io.*;
/**
@@ -116,6 +114,10 @@
public ClassLoader getContextClassLoader() {
return null;
+ }
+
+ public ClassLoader getSystemClassLoader() {
+ return null;
}
public String getSystemProperty(String propName) {
1.3 +13 -2
xml-xerces/java/src/org/apache/xerces/util/SecuritySupport12.java
Index: SecuritySupport12.java
===================================================================
RCS file:
/home/cvs/xml-xerces/java/src/org/apache/xerces/util/SecuritySupport12.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SecuritySupport12.java 24 Jan 2003 17:20:11 -0000 1.2
+++ SecuritySupport12.java 17 Feb 2003 21:43:21 -0000 1.3
@@ -56,9 +56,7 @@
package org.apache.xerces.util;
import java.security.*;
-import java.net.*;
import java.io.*;
-import java.util.*;
/**
* This class is duplicated for each JAXP subpackage so keep it in sync.
@@ -80,6 +78,19 @@
return cl;
}
});
+ }
+
+ public ClassLoader getSystemClassLoader() {
+ return (ClassLoader)
+ AccessController.doPrivileged(new PrivilegedAction() {
+ public Object run() {
+ ClassLoader cl = null;
+ try {
+ cl = ClassLoader.getSystemClassLoader();
+ } catch (SecurityException ex) {}
+ return cl;
+ }
+ });
}
public String getSystemProperty(final String propName) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]