src/javax/xml/parsers/SAXParserFactory.java
Print this page
@@ -24,11 +24,10 @@
*/
package javax.xml.parsers;
import javax.xml.validation.Schema;
-
import org.xml.sax.SAXException;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;
/**
@@ -36,11 +35,11 @@
* obtain a SAX based parser to parse XML documents.
*
* @author <a href="mailto:Jeff.Suttor@Sun.com">Jeff Suttor</a>
* @author <a href="mailto:Neeraj.Bajaj@sun.com">Neeraj Bajaj</a>
*
- * @version $Revision: 1.9 $, $Date: 2010/05/25 16:19:44 $
+ * @version $Revision: 1.10 $, $Date: 2010-11-01 04:36:09 $
*
*/
public abstract class SAXParserFactory {
/** The default property name according to the JAXP spec */
private static final String DEFAULT_PROPERTY_NAME = "javax.xml.parsers.SAXParserFactory";
@@ -85,15 +84,17 @@
* when the first attempt is made to read from it, no further attempts are
* made to check for its existence. It is not possible to change the value
* of any property in jaxp.properties after it has been read for the first time.
* </li>
* <li>
- * Use the Services API (as detailed in the JAR specification), if
- * available, to determine the classname. The Services API will look
- * for a classname in the file
- * <code>META-INF/services/javax.xml.parsers.SAXParserFactory</code>
- * in jars available to the runtime.
+ * Uses the service-provider loading facilities, defined by the {@link java.util.ServiceLoader} class, to attempt
+ * to locate and load an implementation of the service. If there are providers other than the implementation specific
+ * default located, then the first provider that is not the default is instantiated and returned; Otherwise
+ * the default implementation is returned if it is on the classpath or installed as a module.
+ *
+ * If a misconfigured provider is encountered and {@link java.util.ServiceConfigurationError} is thrown, the error will be wrapped
+ * in a {@link javax.xml.parsers.FactoryConfigurationException}.</p>
* </li>
* <li>
* Platform default <code>SAXParserFactory</code> instance.
* </li>
* </ul>
@@ -119,20 +120,20 @@
*
* @throws FactoryConfigurationError if the implementation is
* not available or cannot be instantiated.
*/
- public static SAXParserFactory newInstance() {
- try {
- return (SAXParserFactory) FactoryFinder.find(
+ public static SAXParserFactory newInstance()
+ {
+ try{
+ return (SAXParserFactory) FactoryFinder.find(SAXParserFactory.class,
/* The default property name according to the JAXP spec */
"javax.xml.parsers.SAXParserFactory",
/* The fallback implementation class name */
"com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl");
- } catch (FactoryFinder.ConfigurationError e) {
- throw new FactoryConfigurationError(e.getException(),
- e.getMessage());
+ } catch (FactoryConfigurationError e) {
+ throw e;
}
}
/**
* <p>Obtain a new instance of a <code>SAXParserFactory</code> from class name.
@@ -170,13 +171,12 @@
*/
public static SAXParserFactory newInstance(String factoryClassName, ClassLoader classLoader){
try {
//do not fallback if given classloader can't find the class, throw exception
return (SAXParserFactory) FactoryFinder.newInstance(factoryClassName, classLoader, false);
- } catch (FactoryFinder.ConfigurationError e) {
- throw new FactoryConfigurationError(e.getException(),
- e.getMessage());
+ } catch (FactoryConfigurationError e) {
+ throw e;
}
}
/**
* <p>Creates a new instance of a SAXParser using the currently