garyp       00/12/03 13:12:35

  Modified:    java/src/org/apache/xalan/extensions ExtensionHandler.java
                        ExtensionHandlerJavaClass.java
                        ExtensionHandlerJavaPackage.java
                        ExtensionsTable.java
  Log:
  Load extension using thread's ContextClassLoader, if available.
  Patch in XalanJ1 from Martin Klang <[EMAIL PROTECTED]>.
  
  Revision  Changes    Path
  1.8       +53 -0     
xml-xalan/java/src/org/apache/xalan/extensions/ExtensionHandler.java
  
  Index: ExtensionHandler.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/extensions/ExtensionHandler.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ExtensionHandler.java     2000/11/23 04:57:17     1.7
  +++ ExtensionHandler.java     2000/12/03 21:12:35     1.8
  @@ -57,6 +57,7 @@
   package org.apache.xalan.extensions;
   
   import java.util.Vector;
  +import java.lang.reflect.Method;
   
   import java.io.IOException;
   
  @@ -88,6 +89,58 @@
   
     /** scripting language of implementation          */
     protected String m_scriptLang;
  +
  +  /** a zero length Object array used in getClassForName() */
  +  private static final Object NO_OBJS[] = new Object[0];
  +
  +  /** the Method object for getContextClassLoader */
  +  private static Method getCCL;
  +
  +  static
  +  {
  +    try
  +    {
  +      getCCL = Thread.class.getMethod("getContextClassLoader", new Class[0]);
  +    }
  +    catch (Exception e)
  +    {
  +      getCCL = null;
  +    }
  +  }
  +
  +  /**
  +   * Replacement for Class.forName.  This method loads a class using the 
context class loader
  +   * if we're running under Java2 or higher.  If we're running under Java1, 
this
  +   * method just uses Class.forName to load the class.
  +   */
  +  static Class getClassForName(String className)
  +      throws ClassNotFoundException
  +  {
  +    Class result = null;
  +    if (getCCL != null)
  +    {
  +      try {
  +        ClassLoader contextClassLoader =
  +                              (ClassLoader) 
getCCL.invoke(Thread.currentThread(), NO_OBJS);
  +        result = contextClassLoader.loadClass(className);
  +      }
  +      catch (ClassNotFoundException cnfe)
  +      {
  +        throw cnfe;
  +      }
  +      catch (Exception e)
  +      {
  +        getCCL = null;
  +        result = Class.forName(className);
  +      }
  +    }
  +
  +    else
  +       result = Class.forName(className);
  +
  +    return result;
  + }
  +
   
     /**
      * Construct a new extension namespace handler given all the information
  
  
  
  1.8       +1 -1      
xml-xalan/java/src/org/apache/xalan/extensions/ExtensionHandlerJavaClass.java
  
  Index: ExtensionHandlerJavaClass.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/extensions/ExtensionHandlerJavaClass.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ExtensionHandlerJavaClass.java    2000/11/23 04:57:17     1.7
  +++ ExtensionHandlerJavaClass.java    2000/12/03 21:12:35     1.8
  @@ -117,7 +117,7 @@
       super(namespaceUri, scriptLang, className);
       try
       {
  -      m_classObj = Class.forName(className);
  +      m_classObj = getClassForName(className);
       }
       catch (ClassNotFoundException e)
       {
  
  
  
  1.8       +5 -5      
xml-xalan/java/src/org/apache/xalan/extensions/ExtensionHandlerJavaPackage.java
  
  Index: ExtensionHandlerJavaPackage.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/extensions/ExtensionHandlerJavaPackage.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ExtensionHandlerJavaPackage.java  2000/11/23 04:57:18     1.7
  +++ ExtensionHandlerJavaPackage.java  2000/12/03 21:12:35     1.8
  @@ -135,7 +135,7 @@
         int lastDot = fullName.lastIndexOf(".");
         if (lastDot >= 0)
         {
  -        Class myClass = Class.forName(fullName.substring(0, lastDot));
  +        Class myClass = getClassForName(fullName.substring(0, lastDot));
           Method[] methods = myClass.getMethods();
           int nMethods = methods.length;
           function = fullName.substring(lastDot + 1);
  @@ -168,7 +168,7 @@
         int lastDot = fullName.lastIndexOf(".");
         if (lastDot >= 0)
         {
  -        Class myClass = Class.forName(fullName.substring(0, lastDot));
  +        Class myClass = getClassForName(fullName.substring(0, lastDot));
           Method[] methods = myClass.getMethods();
           int nMethods = methods.length;
           element = fullName.substring(lastDot + 1);
  @@ -283,7 +283,7 @@
           className = m_className + funcName.substring(0, lastDot);
           try
           {
  -          classObj = Class.forName(className);
  +          classObj = getClassForName(className);
           }
           catch (ClassNotFoundException e) 
           {
  @@ -323,7 +323,7 @@
           methodName = funcName.substring(lastDot + 1);
           try
           {
  -          classObj = Class.forName(className);
  +          classObj = getClassForName(className);
           }
           catch (ClassNotFoundException e) 
           {
  @@ -439,7 +439,7 @@
             throw new TransformerException("Invalid element name specified " + 
fullName);
           try
           {
  -          classObj = Class.forName(fullName.substring(0, lastDot));
  +          classObj = getClassForName(fullName.substring(0, lastDot));
           }
           catch (ClassNotFoundException e) 
           {
  
  
  
  1.11      +1 -1      
xml-xalan/java/src/org/apache/xalan/extensions/ExtensionsTable.java
  
  Index: ExtensionsTable.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/extensions/ExtensionsTable.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- ExtensionsTable.java      2000/11/13 16:26:36     1.10
  +++ ExtensionsTable.java      2000/12/03 21:12:35     1.11
  @@ -317,7 +317,7 @@
   
       try
       {
  -      Class.forName(className);
  +      ExtensionHandler.getClassForName(className);
   
         return new ExtensionHandlerJavaClass(ns, "javaclass", className);
       }
  
  
  

Reply via email to