我有一个 Tomcat 5.5 Web 应用程序,它使用 Apache Commons-Configuration 库在运行时生成 XML 配置文件。反过来,Commons-Configuration 使用javax.xml.transform
JAXP API 来完成此操作。
由于升级到 Java 7,操作失败并显示以下错误消息:
Caused by: javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found
at javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
在过去的版本中,我从未捆绑 xalan.jar,而是依赖于平台默认的 XSLT 实现。
我检查过的一些事情:
META-INF/services/javax.xml.transform.TransformerFactory
我的任何应用程序 JAR 文件、库 jar 或 Tomcat jar 中都没有条目- 系统
javax.xml.transform.TransformerFactory
属性未设置(在运行时通过 JVisualVM 验证) - 目录中没有
jaxp.properties
文件jre/lib
运行 with-Djaxp.debug=1
产生以下输出:
JAXP: find factoryId =javax.xml.transform.TransformerFactory
JAXP: loaded from fallback value: org.apache.xalan.processor.TransformerFactoryImpl
这个后备值来自哪里?Oracle 发布了 Xalan 转换器,但从 1.7 开始将其重新打包为com.sun.org.apache.xalan.processor...
. 那不应该是后备值吗?