默认的 TransformerFactory 是什么?

What is the default TransformerFactory?

我正在使用 JAXP XSLT APIs (javax.xml.transform) 转换 xml 文件。

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer(xslSource);
transformer.transform(inputSource, outputResult);

TransformerFactory 的 javadoc 说: 它使用以下有序查找过程来确定要加载的 TransformerFactory 实现 class:

  1. 使用javax.xml.transform.TransformerFactory 系统属性。
  2. 使用 JRE 目录中的属性文件 "lib/jaxp.properties"。这个 配置文件采用标准 java.util.Properties 格式,并且 包含实现的完全限定名称 class 关键是上面定义的系统属性。 jaxp.properties JAXP 实现只读取一次文件及其值 然后缓存起来以备将来使用。如果文件不存在时 第一次尝试从中读取,不再尝试 检查它的存在。无法更改值 在 jaxp.properties 中的任何 属性 被读取之后 第一次。
  3. 使用服务 API(详见 JAR 规范),如果可用,以确定 class 名称。这 服务 API 将在文件中查找 class 名称 META-INF/services/javax.xml.transform.TransformerFactory 在罐子里 可用于运行时。
  4. 平台默认的 TransformerFactory 实例。

我想知道如何确定哪个是默认的 TransformerFactory 实例?

"Platform" 这里是 Java-代表您正在使用的 Java 编译器/运行时。所以 "platform default" 表示 JDK 决定的任何内容。对于 Oracle JDK,它是 JDK 中内置的 Xalan XSLT 1.0 引擎版本。不同的 JDK 可以使用不同的默认值。

来自 Oracle JDK 1.7

Class javax.xml.transform.TransformerFactory:

默认转换器是 XSLTC(最初是从 Xalan 派生出来的)。 XSLTC 是编译版本(XSLTC 中的'C') com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl

public static TransformerFactory newInstance()
    throws TransformerFactoryConfigurationError {
    try {
        return (TransformerFactory) FactoryFinder.find(
        /* The default property name according to the JAXP spec */
        "javax.xml.transform.TransformerFactory",
        /* The fallback implementation class name, XSLTC */
        "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl");
    } catch (FactoryFinder.ConfigurationError e) {
        throw new TransformerFactoryConfigurationError(
            e.getException(),
            e.getMessage());
    }
}