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

📄 objectfactory.java

📁 java1.6众多例子参考
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                    if (fis != null) {                        try {                            fis.close();                        }                        // Ignore the exception.                        catch (IOException exc) {}                    }                }	                        }            if(fXalanProperties != null) {                factoryClassName = fXalanProperties.getProperty(factoryId);            }        } else {            FileInputStream fis = null;            try {                fis = ss.getFileInputStream(new File(propertiesFilename));                Properties props = new Properties();                props.load(fis);                factoryClassName = props.getProperty(factoryId);            } catch (Exception x) {                // assert(x instanceof FileNotFoundException                //        || x instanceof SecurityException)                // In both cases, ignore and continue w/ next location            }            finally {                // try to close the input stream if one was opened.                if (fis != null) {                    try {                        fis.close();                    }                    // Ignore the exception.                    catch (IOException exc) {}                }            }                       }        if (factoryClassName != null) {            debugPrintln("found in " + propertiesFilename + ", value="                          + factoryClassName);            return factoryClassName;        }        // Try Jar Service Provider Mechanism        return findJarServiceProviderName(factoryId);    } // lookUpFactoryClass(String,String):String    //    // Private static methods    //    /** Prints a message to standard error if debugging is enabled. */    private static void debugPrintln(String msg) {        if (DEBUG) {            System.err.println("JAXP: " + msg);        }    } // debugPrintln(String)    /**     * Figure out which ClassLoader to use.  For JDK 1.2 and later use     * the context ClassLoader.     */    static ClassLoader findClassLoader()        throws ConfigurationError    {         SecuritySupport ss = SecuritySupport.getInstance();        // Figure out which ClassLoader to use for loading the provider        // class.  If there is a Context ClassLoader then use it.        ClassLoader context = ss.getContextClassLoader();        ClassLoader system = ss.getSystemClassLoader();        ClassLoader chain = system;        while (true) {            if (context == chain) {                // Assert: we are on JDK 1.1 or we have no Context ClassLoader                // or any Context ClassLoader in chain of system classloader                // (including extension ClassLoader) so extend to widest                // ClassLoader (always look in system ClassLoader if Xalan                // is in boot/extension/system classpath and in current                // ClassLoader otherwise); normal classloaders delegate                // back to system ClassLoader first so this widening doesn't                // change the fact that context ClassLoader will be consulted                ClassLoader current = ObjectFactory.class.getClassLoader();                chain = system;                while (true) {                    if (current == chain) {                        // Assert: Current ClassLoader in chain of                        // boot/extension/system ClassLoaders                        return system;                    }                    if (chain == null) {                        break;                    }                    chain = ss.getParentClassLoader(chain);                }                // Assert: Current ClassLoader not in chain of                // boot/extension/system ClassLoaders                return current;            }            if (chain == null) {                // boot ClassLoader reached                break;            }            // Check for any extension ClassLoaders in chain up to            // boot ClassLoader            chain = ss.getParentClassLoader(chain);        };        // Assert: Context ClassLoader not in chain of        // boot/extension/system ClassLoaders        return context;    } // findClassLoader():ClassLoader    /**     * Create an instance of a class using the specified ClassLoader     */     static Object newInstance(String className, ClassLoader cl,                                      boolean doFallback)        throws ConfigurationError    {        // assert(className != null);        try{            Class providerClass = findProviderClass(className, cl, doFallback);            Object instance = providerClass.newInstance();            debugPrintln("created new instance of " + providerClass +                   " using ClassLoader: " + cl);            return instance;        } catch (ClassNotFoundException x) {            throw new ConfigurationError(                "Provider " + className + " not found", x);        } catch (Exception x) {            throw new ConfigurationError(                "Provider " + className + " could not be instantiated: " + x,                x);        }    }    /**     * Find a Class using the specified ClassLoader     */     static Class findProviderClass(String className, ClassLoader cl,                                           boolean doFallback)        throws ClassNotFoundException, ConfigurationError    {           //throw security exception if the calling thread is not allowed to access the        //class. Restrict the access to the package classes as specified in java.security policy.        SecurityManager security = System.getSecurityManager();        try{                if (security != null){                    final int lastDot = className.lastIndexOf(".");                    String packageName = className;                    if (lastDot != -1) packageName = className.substring(0, lastDot);                    security.checkPackageAccess(packageName);                 }           }catch(SecurityException e){            throw e;        }                Class providerClass;        if (cl == null) {            // XXX Use the bootstrap ClassLoader.  There is no way to            // load a class using the bootstrap ClassLoader that works            // in both JDK 1.1 and Java 2.  However, this should still            // work b/c the following should be true:            //            // (cl == null) iff current ClassLoader == null            //            // Thus Class.forName(String) will use the current            // ClassLoader which will be the bootstrap ClassLoader.            providerClass = Class.forName(className);        } else {            try {                providerClass = cl.loadClass(className);            } catch (ClassNotFoundException x) {                if (doFallback) {                    // Fall back to current classloader                    ClassLoader current = ObjectFactory.class.getClassLoader();                    if (current == null) {                        providerClass = Class.forName(className);                    } else if (cl != current) {                        cl = current;                        providerClass = cl.loadClass(className);                    } else {                        throw x;                    }                } else {                    throw x;                }            }        }        return providerClass;    }    /**     * Find the name of service provider using Jar Service Provider Mechanism     *     * @return instance of provider class if found or null     */    private static String findJarServiceProviderName(String factoryId)    {        SecuritySupport ss = SecuritySupport.getInstance();        String serviceId = SERVICES_PATH + factoryId;        InputStream is = null;        // First try the Context ClassLoader        ClassLoader cl = findClassLoader();        is = ss.getResourceAsStream(cl, serviceId);        // If no provider found then try the current ClassLoader        if (is == null) {            ClassLoader current = ObjectFactory.class.getClassLoader();            if (cl != current) {                cl = current;                is = ss.getResourceAsStream(cl, serviceId);            }        }        if (is == null) {            // No provider found            return null;        }        debugPrintln("found jar resource=" + serviceId +               " using ClassLoader: " + cl);        // Read the service provider name in UTF-8 as specified in        // the jar spec.  Unfortunately this fails in Microsoft        // VJ++, which does not implement the UTF-8        // encoding. Theoretically, we should simply let it fail in        // that case, since the JVM is obviously broken if it        // doesn't support such a basic standard.  But since there        // are still some users attempting to use VJ++ for        // development, we have dropped in a fallback which makes a        // second attempt using the platform's default encoding. In        // VJ++ this is apparently ASCII, which is a subset of        // UTF-8... and since the strings we'll be reading here are        // also primarily limited to the 7-bit ASCII range (at        // least, in English versions), this should work well        // enough to keep us on the air until we're ready to        // officially decommit from VJ++. [Edited comment from        // jkesselm]        BufferedReader rd;        try {            rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));        } catch (java.io.UnsupportedEncodingException e) {            rd = new BufferedReader(new InputStreamReader(is));        }                String factoryClassName = null;        try {            // XXX Does not handle all possible input as specified by the            // Jar Service Provider specification            factoryClassName = rd.readLine();        } catch (IOException x) {            // No provider found            return null;        }        finally {            try {                // try to close the reader.                rd.close();            }            // Ignore the exception.            catch (IOException exc) {}        }                  if (factoryClassName != null &&            ! "".equals(factoryClassName)) {            debugPrintln("found in resource, value="                   + factoryClassName);            // Note: here we do not want to fall back to the current            // ClassLoader because we want to avoid the case where the            // resource file was found using one ClassLoader and the            // provider class was instantiated using a different one.            return factoryClassName;        }        // No provider found        return null;    }    //    // Classes    //    /**     * A configuration error.     */    static class ConfigurationError         extends Error {                static final long serialVersionUID = -2293620736651286953L;        //        // Data        //        /** Exception. */        private Exception exception;        //        // Constructors        //        /**         * Construct a new instance with the specified detail string and         * exception.         */        ConfigurationError(String msg, Exception x) {            super(msg);            this.exception = x;        } // <init>(String,Exception)        //        // Public methods        //        /** Returns the exception associated to this error. */        Exception getException() {            return exception;        } // getException():Exception    } // class ConfigurationError} // class ObjectFactory

⌨️ 快捷键说明

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