jaxpfactory.java

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

JAVA
183
字号
/* * 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 gnu.xml.aelfred2;import java.util.Enumeration;import java.util.Hashtable;import org.xml.sax.Parser;import org.xml.sax.XMLReader;import org.xml.sax.SAXException;import org.xml.sax.SAXNotRecognizedException;import org.xml.sax.SAXNotSupportedException;import org.xml.sax.helpers.XMLReaderAdapter;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;/** * Configurable factory to create an Ælfred2 JAXP parser; required * to bootstrap using JAXP.  You should use SAX2 directly where possible, * rather than through JAXP, since that gives you better control. * This class would normally be configured as a platform default factory. * * @author David Brownell */public final class JAXPFactory extends SAXParserFactory{    private Hashtable	flags = new Hashtable ();    /**     * Constructs a factory which normally returns a non-validating     * parser.     */    public JAXPFactory () { }    public SAXParser newSAXParser ()    throws ParserConfigurationException, SAXException    {	JaxpParser	jaxp = new JaxpParser ();	Enumeration	e = flags.keys ();	XMLReader	parser = jaxp.getXMLReader ();	parser.setFeature (		SAXDriver.FEATURE + "namespaces",		isNamespaceAware ());	parser.setFeature (		SAXDriver.FEATURE + "validation",		isValidating ());	// that makes SAX2 feature flags trump JAXP	while (e.hasMoreElements ()) {	    String	uri = (String) e.nextElement ();	    Boolean	value = (Boolean) flags.get (uri);	    parser.setFeature (uri, value.booleanValue ());	}	return jaxp;    }    // yes, this "feature transfer" mechanism doesn't play well    public void setFeature (String name, boolean value)     throws	ParserConfigurationException,	SAXNotRecognizedException,	SAXNotSupportedException    {	try {	    // force "early" detection of errors where possible	    // (flags can't necessarily be set before parsing)	    new JaxpParser ().getXMLReader ().setFeature (name, value);	    flags.put (name, new Boolean (value));	} catch (SAXNotRecognizedException e) {	    throw new SAXNotRecognizedException (name);	} catch (SAXNotSupportedException e) {	    throw new SAXNotSupportedException (name);	} catch (Exception e) {	    throw new ParserConfigurationException (		  e.getClass ().getName ()		+ ": "		+ e.getMessage ());	}    }    public boolean getFeature (String name)     throws	ParserConfigurationException,	SAXNotRecognizedException,	SAXNotSupportedException    {	Boolean	value = (Boolean) flags.get (name);		if (value == null)	    return value.booleanValue ();	else	    try {		return new JaxpParser ().getXMLReader ().getFeature (name);	    } catch (SAXNotRecognizedException e) {		throw new SAXNotRecognizedException (name);	    } catch (SAXNotSupportedException e) {		throw new SAXNotSupportedException (name);	    } catch (SAXException e) {		throw new ParserConfigurationException (		      e.getClass ().getName ()		    + ": "		    + e.getMessage ());	    }    }    private static class JaxpParser extends SAXParser    {	private XmlReader	ae2 = new XmlReader ();	private XMLReaderAdapter parser = null;	JaxpParser () { }	public void setProperty (String id, Object value) 	throws SAXNotRecognizedException, SAXNotSupportedException	    { ae2.setProperty (id, value); }	public Object getProperty (String id) 	throws SAXNotRecognizedException, SAXNotSupportedException	    { return ae2.getProperty (id); }	public Parser getParser ()	throws SAXException	{ 	    if (parser == null)		parser = new XMLReaderAdapter (ae2);	    return parser;	}	public XMLReader getXMLReader ()	throws SAXException	    { return ae2; }	public boolean isNamespaceAware ()	{	    try {		return ae2.getFeature (SAXDriver.FEATURE + "namespaces");	    } catch (Exception e) {		throw new Error ();	    }	}	public boolean isValidating ()	{	    try {		return ae2.getFeature (SAXDriver.FEATURE + "validation");	    } catch (Exception e) {		throw new Error ();	    }	}    }}

⌨️ 快捷键说明

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