【问题标题】:Tomcat web app - specify TransformerFactoryImpl class doesn't workTomcat Web 应用程序 - 指定 TransformerFactoryImpl 类不起作用
【发布时间】:2012-02-10 19:37:22
【问题描述】:

我需要在 webapp 中使用 xsl 转换,我决定使用 saxon 来实现 xml。我在 pom.xml 中包含了 saxon(9.1 版)作为依赖项。但我仍然不断收到此错误 - Provider net.sf.saxon.TransformerFactoryImpl not found

我找到了这个帖子, How to select saxon TransformerFactory in Java

并完成了所有推荐的操作,设置属性,指定具有 saxon 实现类的服务文件。出于灵活性的原因,我不能直接创建 TransformerFactoryImpl 的实例。那么,我还有其他选择吗?

提前致谢,

编辑:这是错误的堆栈跟踪 -

javax.xml.transform.TransformerFactoryConfigurationError: Provider net.sf.saxon.TransformerFactoryImpl not found
javax.xml.transform.TransformerFactory.newInstance(TransformerFactory.java:108)
com.mondeca.sesame.toolkit.repository.XMLtoRDFDataInjector.injectData(XMLtoRDFDataInjector.java:83)
com.mondeca.sesame.toolkit.repository.LocalMemoryRepositoryProvider.init(LocalMemoryRepositoryProvider.java:105)
org.datalift.modules.base.XmlConverter.applyXslTransformation(XmlConverter.java:192)
org.datalift.modules.base.XmlConverter.transformData(XmlConverter.java:204)
org.datalift.modules.base.XmlConverter.transformData(XmlConverter.java:174)
org.datalift.modules.base.XmlConverter.loadSourceData(XmlConverter.java:149)

从中很明显它找不到撒克逊人。但我根本不明白为什么!我可以看到它也打包在jar文件中!

【问题讨论】:

    标签: java tomcat xslt saxon


    【解决方案1】:

    我认为这对寻找解决方案的人很有用。我很久以前就解决了,但我忘了在这里更新它。基本上,tomcat 会尝试使用它自己的实现来覆盖任何 XML 实现。我使用的 tomcat(必须是 6.0.23)不包含处理 XSLT 转换的最新 XML API(我需要可以处理 XSLT2 的 API)。实际上tomcat在这里有一些奇怪的行为,它不会首先从类路径加载类,而是尝试从它自己的库中加载类(其中可能包含所有必需的java类),这不是加载类的自然顺序。因此,在清单文件中指定将无济于事。另一方面,我们可以通过在启动服务器时指定为选项来覆盖它。将此选项用作服务器参数

    -Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS 
    

    更多信息,tomcatofficial documentation关于这个问题

    【讨论】:

      【解决方案2】:

      您可以尝试将 Saxon JAR 添加到 CLASSPATH 并使用以下方法加载 Saxon:

      TransformerFactory transFactory = new net.sf.saxon.TransformerFactoryImpl();
      

      【讨论】:

      • 正如我上面提到的“出于灵活性原因,我不能直接创建 TransformerFactory 的实例” 此代码在插件中,创建 TransformerFactory 的实例是(曾经)平台的工作。
      猜你喜欢
      • 2017-12-04
      • 2011-11-15
      • 2012-01-27
      • 1970-01-01
      • 2016-06-23
      • 2011-05-19
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多