001    // SAX parser factory.
002    // http://www.saxproject.org
003    // No warranty; no copyright -- use this as you will.
004    // $Id: ParserFactory.java,v 1.1 2004/12/23 22:38:42 mark Exp $
005    
006    package org.xml.sax.helpers;
007    
008    import java.lang.ClassNotFoundException;
009    import java.lang.IllegalAccessException;
010    import java.lang.InstantiationException;
011    import java.lang.SecurityException;
012    import java.lang.ClassCastException;
013    
014    import org.xml.sax.Parser;
015    
016    
017    /**
018     * Java-specific class for dynamically loading SAX parsers.
019     *
020     * <blockquote>
021     * <em>This module, both source code and documentation, is in the
022     * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
023     * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
024     * for further information.
025     * </blockquote>
026     *
027     * <p><strong>Note:</strong> This class is designed to work with the now-deprecated
028     * SAX1 {@link org.xml.sax.Parser Parser} class.  SAX2 applications should use
029     * {@link org.xml.sax.helpers.XMLReaderFactory XMLReaderFactory} instead.</p>
030     *
031     * <p>ParserFactory is not part of the platform-independent definition
032     * of SAX; it is an additional convenience class designed
033     * specifically for Java XML application writers.  SAX applications
034     * can use the static methods in this class to allocate a SAX parser
035     * dynamically at run-time based either on the value of the
036     * `org.xml.sax.parser' system property or on a string containing the class
037     * name.</p>
038     *
039     * <p>Note that the application still requires an XML parser that
040     * implements SAX1.</p>
041     *
042     * @deprecated This class works with the deprecated
043     *             {@link org.xml.sax.Parser Parser}
044     *             interface.
045     * @since SAX 1.0
046     * @author David Megginson
047     * @version 2.0.1 (sax2r2)
048     */
049    public class ParserFactory {
050    
051    
052        /**
053         * Private null constructor.
054         */
055        private ParserFactory ()
056        {
057        }
058    
059    
060        /**
061         * Create a new SAX parser using the `org.xml.sax.parser' system property.
062         *
063         * <p>The named class must exist and must implement the
064         * {@link org.xml.sax.Parser Parser} interface.</p>
065         *
066         * @exception java.lang.NullPointerException There is no value
067         *            for the `org.xml.sax.parser' system property.
068         * @exception java.lang.ClassNotFoundException The SAX parser
069         *            class was not found (check your CLASSPATH).
070         * @exception IllegalAccessException The SAX parser class was
071         *            found, but you do not have permission to load
072         *            it.
073         * @exception InstantiationException The SAX parser class was
074         *            found but could not be instantiated.
075         * @exception java.lang.ClassCastException The SAX parser class
076         *            was found and instantiated, but does not implement
077         *            org.xml.sax.Parser.
078         * @see #makeParser(java.lang.String)
079         * @see org.xml.sax.Parser
080         */
081        public static Parser makeParser ()
082            throws ClassNotFoundException,
083            IllegalAccessException,
084            InstantiationException,
085            NullPointerException,
086            ClassCastException
087        {
088            String className = System.getProperty("org.xml.sax.parser");
089            if (className == null) {
090                throw new NullPointerException("No value for sax.parser property");
091            } else {
092                return makeParser(className);
093            }
094        }
095    
096    
097        /**
098         * Create a new SAX parser object using the class name provided.
099         *
100         * <p>The named class must exist and must implement the
101         * {@link org.xml.sax.Parser Parser} interface.</p>
102         *
103         * @param className A string containing the name of the
104         *                  SAX parser class.
105         * @exception java.lang.ClassNotFoundException The SAX parser
106         *            class was not found (check your CLASSPATH).
107         * @exception IllegalAccessException The SAX parser class was
108         *            found, but you do not have permission to load
109         *            it.
110         * @exception InstantiationException The SAX parser class was
111         *            found but could not be instantiated.
112         * @exception java.lang.ClassCastException The SAX parser class
113         *            was found and instantiated, but does not implement
114         *            org.xml.sax.Parser.
115         * @see #makeParser()
116         * @see org.xml.sax.Parser
117         */
118        public static Parser makeParser (String className)
119            throws ClassNotFoundException,
120            IllegalAccessException,
121            InstantiationException,
122            ClassCastException
123        {
124            return (Parser) NewInstance.newInstance (
125                    NewInstance.getClassLoader (), className);
126        }
127    
128    }