// XMLReaderFactory.java - factory for creating a new reader. // Written by David Megginson, sax@megginson.com // NO WARRANTY! This class is in the Public Domain. // $Id: XMLReaderFactory.java,v 1.1 2000/10/02 02:43:20 sboag Exp $ package org.xml.sax.helpers; import org.xml.sax.Parser; import org.xml.sax.XMLReader; import org.xml.sax.SAXException; /** * Factory for creating an XML reader. * *
* This module, both source code and documentation, is in the * Public Domain, and comes with NO WARRANTY. ** *
This class contains static methods for creating an XML reader
* from an explicit class name, or for creating an XML reader based
* on the value of the org.xml.sax.driver
system
* property:
* try { * XMLReader myReader = XMLReaderFactory.createXMLReader(); * } catch (SAXException e) { * System.err.println(e.getMessage()); * } ** *
Note that these methods will not be usable in environments where * system properties are not accessible or where the application or * applet is not permitted to load classes dynamically.
* *Note to implementors: SAX implementations in specialized * environments may replace this class with a different one optimized for the * environment, as long as its method signatures remain the same.
* * @since SAX 2.0 * @author David Megginson, * sax@megginson.com * @version 2.0 * @see org.xml.sax.XMLReader */ final public class XMLReaderFactory { /** * Private constructor. * *This constructor prevents the class from being instantiated.
*/ private XMLReaderFactory () { } /** * Attempt to create an XML reader from a system property. * *This method uses the value of the system property * "org.xml.sax.driver" as the full name of a Java class * and tries to instantiate that class as a SAX2 * XMLReader.
* *Note that many Java interpreters allow system properties * to be specified on the command line.
* * @return A new XMLReader. * @exception org.xml.sax.SAXException If the value of the * "org.xml.sax.driver" system property is null, * or if the class cannot be loaded and instantiated. * @see #createXMLReader(java.lang.String) */ public static XMLReader createXMLReader () throws SAXException { String className = System.getProperty("org.xml.sax.driver"); if (className == null) { Parser parser; try { parser = ParserFactory.makeParser(); } catch (Exception e) { parser = null; } if (parser == null) { throw new SAXException("System property org.xml.sax.driver not specified"); } else { return new ParserAdapter(parser); } } else { return createXMLReader(className); } } /** * Attempt to create an XML reader from a class name. * *Given a class name, this method attempts to load * and instantiate the class as an XML reader.
* * @return A new XML reader. * @exception org.xml.sax.SAXException If the class cannot be * loaded, instantiated, and cast to XMLReader. * @see #createXMLReader() */ public static XMLReader createXMLReader (String className) throws SAXException { try { return (XMLReader)(Class.forName(className).newInstance()); } catch (ClassNotFoundException e1) { throw new SAXException("SAX2 driver class " + className + " not found", e1); } catch (IllegalAccessException e2) { throw new SAXException("SAX2 driver class " + className + " found but cannot be loaded", e2); } catch (InstantiationException e3) { throw new SAXException("SAX2 driver class " + className + " loaded but cannot be instantiated (no empty public constructor?)", e3); } catch (ClassCastException e4) { throw new SAXException("SAX2 driver class " + className + " does not implement XMLReader", e4); } } } // end of XMLReaderFactory.java