6

我有一个 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

运行 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.... 不应该是后备值吗?

4

2 回答 2

9

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

于 2012-09-06T11:11:45.123 回答
0

Glassfish 服务器 V3.1 也遇到了同样的问题,通过将 xalan-2.7.0.jar 放在 $GLASSFISH_HOME\lib\endorsed 目录中,问题得到了解决。

于 2014-01-08T08:03:27.057 回答