⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 objectfactory.java

📁 java1.6众多例子参考
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * Copyright 2001-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//* * $Id: ObjectFactory.java,v 1.1.2.1 2005/08/01 01:30:35 jeffsuttor Exp $ */package com.sun.org.apache.xpath.internal.compiler;import java.io.InputStream;import java.io.IOException;import java.io.File;import java.io.FileInputStream;import java.util.Properties;import java.io.BufferedReader;import java.io.InputStreamReader;/** * 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 * API. * <p> * This code is designed to implement the JAXP 1.1 spec pluggability * feature and is designed to run on JDK version 1.1 and * later, and to compile on JDK 1.2 and onward. * The code also runs both as part of an unbundled jar file and * when bundled as part of the JDK. * <p> * This class was moved from the <code>javax.xml.parsers.ObjectFactory</code> * class and modified to be used as a general utility for creating objects * dynamically. * * @version $Id: ObjectFactory.java,v 1.1.2.1 2005/08/01 01:30:35 jeffsuttor Exp $ */class ObjectFactory {    //    // Constants    //    // name of default properties file to look for in JDK's jre/lib directory    private static final String DEFAULT_PROPERTIES_FILENAME =                                                     "xalan.properties";    private static final String SERVICES_PATH = "META-INF/services/";    /** Set to true for debugging */    private static final boolean DEBUG = false;    /** cache the contents of the xalan.properties file.     *  Until an attempt has been made to read this file, this will     * be null; if the file does not exist or we encounter some other error     * during the read, this will be empty.     */    private static Properties fXalanProperties = null;    /***     * Cache the time stamp of the xalan.properties file so     * that we know if it's been modified and can invalidate     * the cache when necessary.     */    private static long fLastModified = -1;    //    // Public static methods    //    /**     * Finds the implementation Class object in the specified order.  The     * specified order is the following:     * <ol>     *  <li>query the system property using <code>System.getProperty</code>     *  <li>read <code>META-INF/services/<i>factoryId</i></code> file     *  <li>use fallback classname     * </ol>     *     * @return instance of factory, never null     *     * @param factoryId             Name of the factory to find, same as     *                              a property name     * @param fallbackClassName     Implementation class name, if nothing else     *                              is found.  Use null to mean no fallback.     *     * @exception ObjectFactory.ConfigurationError     */    static Object createObject(String factoryId, String fallbackClassName)        throws ConfigurationError {        return createObject(factoryId, null, fallbackClassName);    } // createObject(String,String):Object    /**     * Finds the implementation Class object in the specified order.  The     * specified order is the following:     * <ol>     *  <li>query the system property using <code>System.getProperty</code>     *  <li>read <code>$java.home/lib/<i>propertiesFilename</i></code> file     *  <li>read <code>META-INF/services/<i>factoryId</i></code> file     *  <li>use fallback classname     * </ol>     *     * @return instance of factory, never null     *     * @param factoryId             Name of the factory to find, same as     *                              a property name     * @param propertiesFilename The filename in the $java.home/lib directory     *                           of the properties file.  If none specified,     *                           ${java.home}/lib/xalan.properties will be used.     * @param fallbackClassName     Implementation class name, if nothing else     *                              is found.  Use null to mean no fallback.     *     * @exception ObjectFactory.ConfigurationError     */    static Object createObject(String factoryId,                                      String propertiesFilename,                                      String fallbackClassName)        throws ConfigurationError    {        Class factoryClass = lookUpFactoryClass(factoryId,                                                propertiesFilename,                                                fallbackClassName);        if (factoryClass == null) {            throw new ConfigurationError(                "Provider for " + factoryId + " cannot be found", null);        }        try{            Object instance = factoryClass.newInstance();            debugPrintln("created new instance of factory " + factoryId);            return instance;        } catch (Exception x) {            throw new ConfigurationError(                "Provider for factory " + factoryId                    + " could not be instantiated: " + x, x);        }    } // createObject(String,String,String):Object    /**     * Finds the implementation Class object in the specified order.  The     * specified order is the following:     * <ol>     *  <li>query the system property using <code>System.getProperty</code>     *  <li>read <code>$java.home/lib/<i>propertiesFilename</i></code> file     *  <li>read <code>META-INF/services/<i>factoryId</i></code> file     *  <li>use fallback classname     * </ol>     *     * @return Class object of factory, never null     *     * @param factoryId             Name of the factory to find, same as     *                              a property name     * @param propertiesFilename The filename in the $java.home/lib directory     *                           of the properties file.  If none specified,     *                           ${java.home}/lib/xalan.properties will be used.     * @param fallbackClassName     Implementation class name, if nothing else     *                              is found.  Use null to mean no fallback.     *     * @exception ObjectFactory.ConfigurationError     */    static Class lookUpFactoryClass(String factoryId)        throws ConfigurationError    {        return lookUpFactoryClass(factoryId, null, null);    } // lookUpFactoryClass(String):Class    /**     * Finds the implementation Class object in the specified order.  The     * specified order is the following:     * <ol>     *  <li>query the system property using <code>System.getProperty</code>     *  <li>read <code>$java.home/lib/<i>propertiesFilename</i></code> file     *  <li>read <code>META-INF/services/<i>factoryId</i></code> file     *  <li>use fallback classname     * </ol>     *     * @return Class object that provides factory service, never null     *     * @param factoryId             Name of the factory to find, same as     *                              a property name     * @param propertiesFilename The filename in the $java.home/lib directory     *                           of the properties file.  If none specified,     *                           ${java.home}/lib/xalan.properties will be used.     * @param fallbackClassName     Implementation class name, if nothing else     *                              is found.  Use null to mean no fallback.     *     * @exception ObjectFactory.ConfigurationError     */    static Class lookUpFactoryClass(String factoryId,                                           String propertiesFilename,                                           String fallbackClassName)        throws ConfigurationError    {        String factoryClassName = lookUpFactoryClassName(factoryId,                                                         propertiesFilename,                                                         fallbackClassName);        ClassLoader cl = findClassLoader();        if (factoryClassName == null) {            factoryClassName = fallbackClassName;        }        // assert(className != null);        try{            Class providerClass = findProviderClass(factoryClassName,                                                    cl,                                                    true);            debugPrintln("created new instance of " + providerClass +                   " using ClassLoader: " + cl);            return providerClass;        } catch (ClassNotFoundException x) {            throw new ConfigurationError(                "Provider " + factoryClassName + " not found", x);        } catch (Exception x) {            throw new ConfigurationError(                "Provider "+factoryClassName+" could not be instantiated: "+x,                x);        }    } // lookUpFactoryClass(String,String,String):Class    /**     * Finds the name of the required implementation class in the specified     * order.  The specified order is the following:     * <ol>     *  <li>query the system property using <code>System.getProperty</code>     *  <li>read <code>$java.home/lib/<i>propertiesFilename</i></code> file     *  <li>read <code>META-INF/services/<i>factoryId</i></code> file     *  <li>use fallback classname     * </ol>     *     * @return name of class that provides factory service, never null     *     * @param factoryId             Name of the factory to find, same as     *                              a property name     * @param propertiesFilename The filename in the $java.home/lib directory     *                           of the properties file.  If none specified,     *                           ${java.home}/lib/xalan.properties will be used.     * @param fallbackClassName     Implementation class name, if nothing else     *                              is found.  Use null to mean no fallback.     *     * @exception ObjectFactory.ConfigurationError     */    static String lookUpFactoryClassName(String factoryId,                                                String propertiesFilename,                                                String fallbackClassName)    {        SecuritySupport ss = SecuritySupport.getInstance();        // Use the system property first        try {            String systemProp = ss.getSystemProperty(factoryId);            if (systemProp != null) {                debugPrintln("found system property, value=" + systemProp);                return systemProp;            }        } catch (SecurityException se) {            // Ignore and continue w/ next location        }        // Try to read from propertiesFilename, or        // $java.home/lib/xalan.properties        String factoryClassName = null;        // no properties file name specified; use        // $JAVA_HOME/lib/xalan.properties:        if (propertiesFilename == null) {            File propertiesFile = null;            boolean propertiesFileExists = false;            try {                String javah = ss.getSystemProperty("java.home");                propertiesFilename = javah + File.separator +                    "lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;                propertiesFile = new File(propertiesFilename);                propertiesFileExists = ss.getFileExists(propertiesFile);            } catch (SecurityException e) {                // try again...                fLastModified = -1;                fXalanProperties = null;            }            synchronized (ObjectFactory.class) {                boolean loadProperties = false;                try {                    // file existed last time                    if(fLastModified >= 0) {                        if(propertiesFileExists &&                                (fLastModified < (fLastModified = ss.getLastModified(propertiesFile)))) {                            loadProperties = true;                        } else {                            // file has stopped existing...                            if(!propertiesFileExists) {                                fLastModified = -1;                                fXalanProperties = null;                            } // else, file wasn't modified!                        }                    } else {                        // file has started to exist:                        if(propertiesFileExists) {                            loadProperties = true;                            fLastModified = ss.getLastModified(propertiesFile);                        } // else, nothing's changed                    }                    if(loadProperties) {                        // must never have attempted to read xalan.properties                        // before (or it's outdeated)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -