costin      01/05/15 14:18:36

  Modified:    java/src/javax/xml/parsers DocumentBuilderFactory.java
                        SAXParserFactory.java
               java/src/javax/xml/transform TransformerFactory.java
  Log:
  Use the context class loader if available.
  
  The implementation is based on ExtensionHandler, and it's needed in order
   to work in certain environments ( like tomcat ).
  
  Revision  Changes    Path
  1.5       +36 -1     
xml-xalan/java/src/javax/xml/parsers/DocumentBuilderFactory.java
  
  Index: DocumentBuilderFactory.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/javax/xml/parsers/DocumentBuilderFactory.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- DocumentBuilderFactory.java       2001/01/29 21:43:33     1.4
  +++ DocumentBuilderFactory.java       2001/05/15 21:18:14     1.5
  @@ -143,7 +143,7 @@
   
           DocumentBuilderFactory factoryImpl;
           try {
  -            Class clazz = Class.forName(factoryImplName);
  +            Class clazz = getClassForName(factoryImplName);
               factoryImpl = (DocumentBuilderFactory)clazz.newInstance();
           } catch  (ClassNotFoundException cnfe) {
               throw new FactoryConfigurationError(cnfe);
  @@ -154,6 +154,41 @@
           }
           return factoryImpl;
       }
  +
  +    /** a zero length Object array used in getClassForName() */
  +    private static final Object NO_OBJS[] = new Object[0];
  +    /** the Method object for getContextClassLoader */
  +    private static java.lang.reflect.Method getCCL;
  +    
  +    static {
  +     try { 
  +         getCCL = Thread.class.getMethod("getContextClassLoader",
  +                                         new Class[0]);
  +     } catch (Exception e) {
  +         getCCL = null;
  +     }
  +    }
  +    
  +    private static Class getClassForName(String className )
  +        throws ClassNotFoundException
  +    {
  +     if (getCCL != null) {
  +         try {
  +             ClassLoader contextClassLoader =
  +                 (ClassLoader) getCCL.invoke(Thread.currentThread(),
  +                                             NO_OBJS);
  +             return contextClassLoader.loadClass(className);
  +         } catch (ClassNotFoundException cnfe) {
  +             // nothing, try again with Class.forName 
  +         } catch (Exception e) {
  +             getCCL = null; // don't try again
  +             // fallback
  +         }
  +     }
  +     
  +     return Class.forName(className);
  +    }
  +
       
       /**
        * Creates a new instance of a DocumentBuilder using the
  
  
  
  1.6       +36 -1     
xml-xalan/java/src/javax/xml/parsers/SAXParserFactory.java
  
  Index: SAXParserFactory.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/javax/xml/parsers/SAXParserFactory.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- SAXParserFactory.java     2001/01/29 21:43:34     1.5
  +++ SAXParserFactory.java     2001/05/15 21:18:18     1.6
  @@ -144,7 +144,7 @@
   
           SAXParserFactory factoryImpl = null;
           try {
  -            Class clazz = Class.forName(factoryImplName);
  +            Class clazz = getClassForName(factoryImplName);
               factoryImpl = (SAXParserFactory)clazz.newInstance();
           } catch  (ClassNotFoundException cnfe) {
               throw new FactoryConfigurationError(cnfe);
  @@ -155,7 +155,42 @@
           }
           return factoryImpl;
       }
  +
  +    /** a zero length Object array used in getClassForName() */
  +    private static final Object NO_OBJS[] = new Object[0];
  +    /** the Method object for getContextClassLoader */
  +    private static java.lang.reflect.Method getCCL;
       
  +    static {
  +     try { 
  +         getCCL = Thread.class.getMethod("getContextClassLoader",
  +                                         new Class[0]);
  +     } catch (Exception e) {
  +         getCCL = null;
  +     }
  +    }
  +    
  +    private static Class getClassForName(String className )
  +        throws ClassNotFoundException
  +    {
  +     if (getCCL != null) {
  +         try {
  +             ClassLoader contextClassLoader =
  +                 (ClassLoader) getCCL.invoke(Thread.currentThread(),
  +                                             NO_OBJS);
  +             return contextClassLoader.loadClass(className);
  +         } catch (ClassNotFoundException cnfe) {
  +             // nothing, try again with Class.forName 
  +         } catch (Exception e) {
  +             getCCL = null; // don't try again
  +             // fallback
  +         }
  +     }
  +     
  +     return Class.forName(className);
  +    }
  +
  +  
       /**
        * Creates a new instance of a SAXParser using the currently
        * configured factory parameters.
  
  
  
  1.15      +38 -2     
xml-xalan/java/src/javax/xml/transform/TransformerFactory.java
  
  Index: TransformerFactory.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/javax/xml/transform/TransformerFactory.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- TransformerFactory.java   2001/01/29 22:03:46     1.14
  +++ TransformerFactory.java   2001/05/15 21:18:32     1.15
  @@ -55,7 +55,7 @@
    * <http://www.apache.org/>.
    */
   /**
  - * $Id: TransformerFactory.java,v 1.14 2001/01/29 22:03:46 costin Exp $
  + * $Id: TransformerFactory.java,v 1.15 2001/05/15 21:18:32 costin Exp $
    */
   package javax.xml.transform;
   
  @@ -143,7 +143,7 @@
           TransformerFactory factoryImpl;
   
           try {
  -            Class clazz = Class.forName(classname);
  +            Class clazz = getClassForName(classname);
   
               factoryImpl = (TransformerFactory) clazz.newInstance();
           } catch (ClassNotFoundException cnfe) {
  @@ -157,6 +157,42 @@
           return factoryImpl;
       }
   
  +
  +    
  +    /** a zero length Object array used in getClassForName() */
  +    private static final Object NO_OBJS[] = new Object[0];
  +    /** the Method object for getContextClassLoader */
  +    private static java.lang.reflect.Method getCCL;
  +    
  +    static {
  +     try { 
  +         getCCL = Thread.class.getMethod("getContextClassLoader",
  +                                         new Class[0]);
  +     } catch (Exception e) {
  +         getCCL = null;
  +     }
  +    }
  +    
  +    private static Class getClassForName(String className )
  +        throws ClassNotFoundException
  +    {
  +     if (getCCL != null) {
  +         try {
  +             ClassLoader contextClassLoader =
  +                 (ClassLoader) getCCL.invoke(Thread.currentThread(),
  +                                             NO_OBJS);
  +             return contextClassLoader.loadClass(className);
  +         } catch (ClassNotFoundException cnfe) {
  +             // nothing, try again with Class.forName 
  +         } catch (Exception e) {
  +             getCCL = null; // don't try again
  +             // fallback
  +         }
  +     }
  +     
  +     return Class.forName(className);
  +    }
  +  
       /**
        * Process the Source into a Transformer object.  Care must
        * be given not to use this object in multiple threads running 
concurrently.
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to