diff --git a/build.xml b/build.xml index df7e6084e..ba937f2af 100644 --- a/build.xml +++ b/build.xml @@ -78,6 +78,9 @@ Copyright: + + + @@ -359,7 +362,7 @@ Copyright: - @@ -372,7 +375,7 @@ Copyright: - @@ -447,11 +450,14 @@ Copyright: includeEmptyDirs="true" quiet="true"/> + @@ -845,6 +851,7 @@ Copyright: + diff --git a/src/org/apache/xalan/xsltc/runtime/TransletLoader.java b/src/org/apache/xalan/xsltc/runtime/TransletLoader.java index 1974afae8..faa886178 100644 --- a/src/org/apache/xalan/xsltc/runtime/TransletLoader.java +++ b/src/org/apache/xalan/xsltc/runtime/TransletLoader.java @@ -57,6 +57,7 @@ * . * * @author Morten Jorgensen + * @author Santiago Pericas-Geertsen * */ @@ -64,6 +65,9 @@ import java.lang.Class; import java.lang.ClassLoader; +import java.lang.Thread; + +import java.net.*; // temporary /** * This class is intended used when the default Class.forName() method fails. @@ -91,14 +95,14 @@ final public class TransletLoader { * Get a handle to the system class loader */ public TransletLoader() { - // Get the default class loader - ClassLoader loader = this.getClass().getClassLoader(); - // If this is the extensions class loader we need to get the - // default system class loader instead. This is permitted if - // this class was loaded by the extensions class loader. - String loaderName = loader.getClass().getName(); - if (loaderName.equals("sun.misc.Launcher$ExtClassLoader")) + // Get the loader for the current thread (not the current class) + ClassLoader loader = Thread.currentThread().getContextClassLoader(); + + // Avoid using the extensions class loader (see comment above) + final String loaderName = loader.getClass().getName(); + if (loaderName.equals("sun.misc.Launcher$ExtClassLoader")) { loader = ClassLoader.getSystemClassLoader(); + } _loader = loader; } @@ -108,6 +112,7 @@ public TransletLoader() { public Class loadClass(String name) throws ClassNotFoundException { return(Class.forName(name, false, _loader)); } + /** * Loads a Class definition and runs static initializers. */ diff --git a/src/org/apache/xalan/xsltc/trax/SAX2DOM.java b/src/org/apache/xalan/xsltc/trax/SAX2DOM.java index 82177b772..8dd461631 100644 --- a/src/org/apache/xalan/xsltc/trax/SAX2DOM.java +++ b/src/org/apache/xalan/xsltc/trax/SAX2DOM.java @@ -57,7 +57,6 @@ * . * * @author G. Todd Miller - * */ @@ -102,9 +101,7 @@ public void characters(char[] ch, int start, int length) { public void startDocument() { _document = _builder.newDocument(); - Element root = (Element)_document.createElement("root"); - _document.appendChild(root); - _nodeStk.push(root); + // bugfix 6417, contributed by Tim Elcott } public void endDocument() { diff --git a/src/org/apache/xalan/xsltc/trax/TemplatesImpl.java b/src/org/apache/xalan/xsltc/trax/TemplatesImpl.java index e1c099c8f..26cde36d2 100644 --- a/src/org/apache/xalan/xsltc/trax/TemplatesImpl.java +++ b/src/org/apache/xalan/xsltc/trax/TemplatesImpl.java @@ -59,6 +59,7 @@ * @author Morten Jorgensen * @author G. Todd Millerj * @author Jochen Cordes + * @author Santiago Pericas-Geertsen * */ @@ -176,8 +177,13 @@ private void defineTransletClasses() (TransletClassLoader) AccessController.doPrivileged( new PrivilegedAction() { public Object run() { - ClassLoader current = getClass().getClassLoader(); - return new TransletClassLoader(current); + /* + * Get the loader from the current thread instead of + * the class. This is important for translets that load + * external Java classes and run in multi-threaded envs. + */ + return new TransletClassLoader( + Thread.currentThread().getContextClassLoader()); } } ); diff --git a/src/trax/trax.properties b/src/trax/trax.properties deleted file mode 100644 index e593c393a..000000000 --- a/src/trax/trax.properties +++ /dev/null @@ -1,11 +0,0 @@ -# $Revision$ $Date$ -# -# Note: This properties file is provided for illustrative purposes -# only and is not part of the interface definition. -# This properties file is located in the implementation JAR -# and different implementations will specify different -# implementation classes and output methods. -# - -# The TRaX Stylesheet processor -trax.processor.xslt=org.apache.xalan.processor.StylesheetProcessor