我有一个Tomcat 5.5 Web应用程序,该应用程序使用Apache Commons- Configuration库在运行时生成XML配置文件。反过来,Commons- Configuration使用javax.xml.transformJAXP API来完成此任务。
javax.xml.transform
由于升级到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
javax.xml.transform.TransformerFactory
jaxp.properties
jre/lib
使用运行-Djaxp.debug=1会产生以下输出:
-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...。不应该 说 是回退值?
com.sun.org.apache.xalan.processor...
自己找到了问题。事实证明,apache-tomcat-5.5.23-compat从Java 1.4.2迁移时,我已经安装了文件。解决方案是删除$CATALINA_HOME/common/endorsed目录(尤其是xercesImpl.jar和xml- apis.jar)和bin/jmx.jar文件下的所有内容。
apache-tomcat-5.5.23-compat
$CATALINA_HOME/common/endorsed
xercesImpl.jar
xml- apis.jar
bin/jmx.jar