一尘不染

JAXP XSLT转换器默认使用错误的实现

tomcat

我有一个Tomcat 5.5 Web应用程序,该应用程序使用Apache Commons-
Configuration库在运行时生成XML配置文件。反过来,Commons-
Configuration使用javax.xml.transformJAXP 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

使用运行-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...。不应该
是回退值?


阅读 309

收藏
2020-06-16

共1个答案

一尘不染

自己找到了问题。事实证明,apache-tomcat-5.5.23-compat从Java
1.4.2迁移时,我已经安装了文件。解决方案是删除$CATALINA_HOME/common/endorsed目录(尤其是xercesImpl.jarxml- apis.jar)和bin/jmx.jar文件下的所有内容。

2020-06-16