Tomcat Web应用程序 - 指定TransformerFactoryImpl类不起作用

时间:2012-01-15 14:08:14

标签: java tomcat xslt saxon

我需要在webapp中使用xsl转换,我决定使用saxon进行xml实现。我在pom.xml中包含了saxon(版本9.1)作为依赖项。但我仍然收到此错误 - 找不到提供商net.sf.saxon.TransformerFactoryImpl

我找到了这个帖子, 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文件中了!

2 个答案:

答案 0 :(得分:1)

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

-Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS 

有关此问题的更多信息,tomcat official documentation

答案 1 :(得分:0)

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

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