默认的 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:
- 使用javax.xml.transform.TransformerFactory 系统属性。
- 使用 JRE 目录中的属性文件 "lib/jaxp.properties"。这个
配置文件采用标准 java.util.Properties 格式,并且
包含实现的完全限定名称 class
关键是上面定义的系统属性。 jaxp.properties
JAXP 实现只读取一次文件及其值
然后缓存起来以备将来使用。如果文件不存在时
第一次尝试从中读取,不再尝试
检查它的存在。无法更改值
在 jaxp.properties 中的任何 属性 被读取之后
第一次。
- 使用服务 API(详见 JAR
规范),如果可用,以确定 class 名称。这
服务 API 将在文件中查找 class 名称
META-INF/services/javax.xml.transform.TransformerFactory 在罐子里
可用于运行时。
- 平台默认的 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());
}
}
我正在使用 JAXP XSLT APIs (javax.xml.transform) 转换 xml 文件。
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer(xslSource);
transformer.transform(inputSource, outputResult);
TransformerFactory 的 javadoc 说: 它使用以下有序查找过程来确定要加载的 TransformerFactory 实现 class:
- 使用javax.xml.transform.TransformerFactory 系统属性。
- 使用 JRE 目录中的属性文件 "lib/jaxp.properties"。这个 配置文件采用标准 java.util.Properties 格式,并且 包含实现的完全限定名称 class 关键是上面定义的系统属性。 jaxp.properties JAXP 实现只读取一次文件及其值 然后缓存起来以备将来使用。如果文件不存在时 第一次尝试从中读取,不再尝试 检查它的存在。无法更改值 在 jaxp.properties 中的任何 属性 被读取之后 第一次。
- 使用服务 API(详见 JAR 规范),如果可用,以确定 class 名称。这 服务 API 将在文件中查找 class 名称 META-INF/services/javax.xml.transform.TransformerFactory 在罐子里 可用于运行时。
- 平台默认的 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());
}
}