使用SAXParserFactory的哪个实现?

时间:2014-12-25 12:19:56

标签: xml saxparser

我正在处理xml pasring。当我检查SAXParserFactory的代码时,我看到了

public static SAXParserFactory newInstance() {
    try {
        return (SAXParserFactory) FactoryFinder.find(
            /* 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());
    }
}

我想知道实际返回了SAXParserFactory的哪个实现?如何查看我正在处理的实施?提前致谢

1 个答案:

答案 0 :(得分:2)

与工厂模式一样,SaxParserFactory有自己的初始化方法。在方法的javadoc中对此进行了详细解释(参见SAXParserFactory.newInstance() )。

搜索工厂的实施如下:

  • 首先检查是否存在系统属性:有时一个错误的书面库设置此属性但很少
  • 在jaxp.properties中进行第二次检查:这是一个JRE设置,但不是默认设置
  • 在运行时jar中进行第三次检查:搜索META-INF / services / javax.xml.parsers.SAXParserFactory;例如在xercexImpl.jar中找到这个文件,它包含了这个文本com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl(这是你的运行时环境中有这个jar时该方法返回的工厂实现)
  • 第四次检查平台默认实现:我不知道它引用的是哪个平台,也许是一个java容器(J2EE应用服务器)

如果您想尝试尝试使用-Djaxp.debug = 1启动您的jvm(在javadoc中指定)。