【问题标题】:What is the default TransformerFactory?什么是默认的 TransformerFactory?
【发布时间】:2015-06-09 15:02:16
【问题描述】:

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

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

【问题讨论】:

    标签: java xslt jaxp


    【解决方案1】:

    这里的“平台”是您正在使用的 Java 编译器/运行时的 Java 语言。因此,“平台默认值”意味着 JDK 决定的任何内容。对于 Oracle JDK,它是 JDK 中内置的 Xalan XSLT 1.0 引擎的一个版本。不同的 JDK 可以使用不同的默认值。

    【讨论】:

    • 谢谢。如何检查 Oracle JDK 包含的默认 xslt 处理器(例如 Oracle JDK 1.6)支持哪个 XSLT 版本(1.0、2.0、3.0)?
    • 所有当前版本的 Oracle JDK 中的默认 XSLT 处理器仅支持 XSLT 1.0。但是如果你想检查这个,你可以写一个测试比如test="system-property('xsl:version') = 1.0"
    【解决方案2】:

    来自 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());
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 2015-12-17
      相关资源
      最近更新 更多