From 01c6c51764809b25dfba61d59c891b2e7de10f07 Mon Sep 17 00:00:00 2001 From: mrglavas Date: Fri, 17 Jun 2005 19:50:14 +0000 Subject: [PATCH] Merge in a fix from the tck-jaxp-1_2_0 branch: Under some JDK's (notably both Sun and IBM 1.4.0), getClassLoader(), when invoked on the JAXP or SAX classes, it returns null. This means that the fallback mechanism in these APIs may not work correctly: in particular, when an attempt to invoke an unknown Parser/XMLReader implementation is made in SAX, a NullPointerException rather than the correct ClassNotFoundException results. This patch fixes this problem, by using Class.forName() in the event that the bootstrap classloader is not returned in this particular situation. git-svn-id: https://svn.apache.org/repos/asf/xml/commons/trunk@226239 13f79535-47bb-0310-9956-ffa450edef68 --- java/external/src/javax/xml/parsers/FactoryFinder.java | 7 ++++++- java/external/src/javax/xml/transform/FactoryFinder.java | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/java/external/src/javax/xml/parsers/FactoryFinder.java b/java/external/src/javax/xml/parsers/FactoryFinder.java index 26147c7..a41ac66 100644 --- a/java/external/src/javax/xml/parsers/FactoryFinder.java +++ b/java/external/src/javax/xml/parsers/FactoryFinder.java @@ -105,7 +105,12 @@ class FactoryFinder { if (doFallback) { // Fall back to current classloader cl = FactoryFinder.class.getClassLoader(); - providerClass = cl.loadClass(className); + if (cl != null) { + providerClass = cl.loadClass(className); + } + else { + providerClass = Class.forName(className); + } } else { throw x; } diff --git a/java/external/src/javax/xml/transform/FactoryFinder.java b/java/external/src/javax/xml/transform/FactoryFinder.java index 1c9f5a8..c7542c2 100644 --- a/java/external/src/javax/xml/transform/FactoryFinder.java +++ b/java/external/src/javax/xml/transform/FactoryFinder.java @@ -105,7 +105,12 @@ class FactoryFinder { if (doFallback) { // Fall back to current classloader cl = FactoryFinder.class.getClassLoader(); - providerClass = cl.loadClass(className); + if (cl != null) { + providerClass = cl.loadClass(className); + } + else { + providerClass = Class.forName(className); + } } else { throw x; }