classstuff.java

来自「kaffe Java 解释器语言,源码,Java的子集系统,开放源代码」· Java 代码 · 共 159 行

JAVA
159
字号
/* * $Id: ClassStuff.java,v 1.3 2003/12/02 21:38:01 dalibor Exp $ * Copyright (C) 2001 David Brownell *  * This file is part of GNU JAXP, a library. * * GNU JAXP is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. *  * GNU JAXP is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. *  * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA * * As a special exception, if you link this library with other files to * produce an executable, this library does not by itself cause the * resulting executable to be covered by the GNU General Public License. * This exception does not however invalidate any other reasons why the * executable file might be covered by the GNU General Public License.  */package javax.xml.parsers;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.io.InputStreamReader;import java.lang.reflect.Method;import java.util.Properties;// $Id: ClassStuff.java,v 1.3 2003/12/02 21:38:01 dalibor Exp $/** * Package-private utility methods for sharing * magic related to class loading. * NOTE:  This is cloned in javax.xml.transform, * where a different exception is thrown (bleech). * Keep changes to the two copies in sync. * * @author David Brownell * @version	$Id: ClassStuff.java,v 1.3 2003/12/02 21:38:01 dalibor Exp $ */final class ClassStuff{    private ClassStuff () { }    /**     * Get the default factory using the four-stage defaulting     * mechanism defined by JAXP.     */    static Object    createFactory (String label, String defaultClass)    throws FactoryConfigurationError    {	String		name = null;	ClassLoader	loader = null;	// figure out which class loader to use.	// source compiles on jdk 1.1, but works with jdk 1.2+ security        try {	    Method 	m = null;	    // Can we use JDK 1.2 APIs?  Preferred: security policies apply.            m = Thread.class.getMethod ("getContextClassLoader", null);            loader = (ClassLoader) m.invoke (Thread.currentThread(), null);        } catch (NoSuchMethodException e) {            // Assume that we are running JDK 1.1; use current ClassLoader            loader = ClassStuff.class.getClassLoader();        } catch (NoSuchMethodError e) {            // evidently IE does this (one of its bugs)            loader = ClassStuff.class.getClassLoader();	} catch (Throwable e) {	    // "should not happen"            throw new UnknownError (e.getMessage());        }	// 1. Check System Property	// ... normally fails in applet environments	try { name = System.getProperty (label);	} catch (SecurityException e) { /* IGNORE */ }	// 2. Check in $JAVA_HOME/lib/jaxp.properties	try {	    if (name == null) {		String	javaHome;		File	file;		javaHome = System.getProperty ("java.home");		file = new File (new File (javaHome, "lib"), "jaxp.properties");		if (file.exists() == true) {		    FileInputStream	in = new FileInputStream (file);		    Properties		props = new Properties();		    props.load (in);		    name  = props.getProperty (label);		    in.close ();		}	    }	} catch (Exception e) { /* IGNORE */ }	// 3. Check Services API	if (name == null) {	    try {		String		service = "META-INF/services/" + label;		InputStream	in;		BufferedReader	reader;		if (loader == null)		    in = ClassLoader.getSystemResourceAsStream (service);		else		    in = loader.getResourceAsStream (service);		if (in != null) {		    reader = new BufferedReader (			new InputStreamReader (in, "UTF8"));		    name = reader.readLine();		    in.close ();		}	    } catch (Exception e2) { /* IGNORE */ }	}	// 4. Distro-specific fallback	if (name == null)	    name = defaultClass;		// Instantiate!	try {	    Class	klass;	    if (loader == null)		klass = Class.forName (name);	    else		klass = loader.loadClass (name);	    return klass.newInstance ();	} catch (ClassNotFoundException e) {	    throw new FactoryConfigurationError (e,		"Factory class " + name		    + " not found");	} catch (IllegalAccessException e) {	    throw new FactoryConfigurationError (e,		"Factory class " + name		    + " found but cannot be loaded");	} catch (InstantiationException e) {	    throw new FactoryConfigurationError (e,		"Factory class " + name		    + " loaded but cannot be instantiated"		    + " ((no default constructor?)");	}    }}

⌨️ 快捷键说明

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