什么是默认的TransformerFactory?

时间:2015-04-04 19:24:15

标签: java xslt jaxp

我使用JAXP XSLT API(javax.xml.transform)来转换xml文件。

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

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

来自Oracle JDK 1.7

班级javax.xml.transform.TransformerFactory

默认Transformer是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());
    }
}