9556f88777
From-SVN: r43922
137 lines
4.2 KiB
Java
137 lines
4.2 KiB
Java
// 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.
|
|
*
|
|
* <blockquote>
|
|
* <em>This module, both source code and documentation, is in the
|
|
* Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
|
|
* </blockquote>
|
|
*
|
|
* <p>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 <code>org.xml.sax.driver</code> system
|
|
* property:</p>
|
|
*
|
|
* <pre>
|
|
* try {
|
|
* XMLReader myReader = XMLReaderFactory.createXMLReader();
|
|
* } catch (SAXException e) {
|
|
* System.err.println(e.getMessage());
|
|
* }
|
|
* </pre>
|
|
*
|
|
* <p>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.</p>
|
|
*
|
|
* <p><strong>Note to implementors:</strong> 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.</p>
|
|
*
|
|
* @since SAX 2.0
|
|
* @author David Megginson,
|
|
* <a href="mailto:sax@megginson.com">sax@megginson.com</a>
|
|
* @version 2.0
|
|
* @see org.xml.sax.XMLReader
|
|
*/
|
|
final public class XMLReaderFactory
|
|
{
|
|
|
|
/**
|
|
* Private constructor.
|
|
*
|
|
* <p>This constructor prevents the class from being instantiated.</p>
|
|
*/
|
|
private XMLReaderFactory ()
|
|
{
|
|
}
|
|
|
|
|
|
/**
|
|
* Attempt to create an XML reader from a system property.
|
|
*
|
|
* <p>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.</p>
|
|
*
|
|
* <p>Note that many Java interpreters allow system properties
|
|
* to be specified on the command line.</p>
|
|
*
|
|
* @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.
|
|
*
|
|
* <p>Given a class name, this method attempts to load
|
|
* and instantiate the class as an XML reader.</p>
|
|
*
|
|
* @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
|