我有一个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
个条目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...
。 该不应该是后备值吗?
答案 0 :(得分:8)
我自己发现了这个问题。事实证明我安装了apache-tomcat-5.5.23-compat
文件,因为我从Java 1.4.2迁移。解决方案是删除$CATALINA_HOME/common/endorsed
目录(特别是xercesImpl.jar
和xml-apis.jar
)和bin/jmx.jar
文件下的所有内容。
答案 1 :(得分:0)
同样的问题我也使用Glassfish服务器V3.1并将xalan-2.7.0.jar放在$ GLASSFISH_HOME \ lib \ endorsed目录中,问题得到解决。