gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 19:40:27 29 4
gpt4 key购买 nike

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

我检查过的一些东西:

  • 我的任何应用程序 JAR 文件、库 jar 或 Tomcat jar 中都没有 META-INF/services/javax.xml.transform.TransformerFactory 条目
  • javax.xml.transform.TransformerFactory 系统属性未设置(在运行时通过 JVisualVM 验证)
  • jre/lib目录下没有jaxp.properties文件

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

最佳答案

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

关于java - JAXP XSLT 转换器默认使用错误的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12284131/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com