public static String lookUpFactoryClassName(String factoryId,
static String lookUpFactoryClassName(String factoryId,
    public 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)                        fXalanProperties = new Properties();                        FileInputStream fis =                                         ss.getFileInputStream(propertiesFile);                        fXalanProperties.load(fis);                        fis.close();                    }	            } catch (Exception x) {	                fXalanProperties = null;	                fLastModified = -1;                        // assert(x instanceof FileNotFoundException	                //        || x instanceof SecurityException)	                // In both cases, ignore and continue w/ next location	            }            }            if(fXalanProperties != null) {                factoryClassName = fXalanProperties.getProperty(factoryId);            }        } else {            try {                FileInputStream fis =                           ss.getFileInputStream(new File(propertiesFilename));                Properties props = new Properties();                props.load(fis);                fis.close();                factoryClassName = props.getProperty(factoryId);            } catch (Exception x) {                // assert(x instanceof FileNotFoundException                //        || x instanceof SecurityException)                // In both cases, ignore and continue w/ next location            }        }        if (factoryClassName != null) {            debugPrintln("found in " + propertiesFilename + ", value="                          + factoryClassName);            return factoryClassName;        }        // Try Jar Service Provider Mechanism        return findJarServiceProviderName(factoryId);    } // lookUpFactoryClass(String,String):String