簡體   English   中英

Tomcat Web應用程序-指定TransformerFactoryImpl類不起作用

[英]Tomcat web app - specify TransformerFactoryImpl class doesn't work

我需要在webapp中使用xsl轉換,因此決定將saxon用於xml實現。 我在pom.xml中包含了saxon(9.1版)作為依賴項。 但我仍然不斷收到此錯誤-找不到提供程序net.sf.saxon.TransformerFactoryImpl

我發現了這個線程, 如何在Java中選擇saxon TransformerFactory

並建議執行所有操作,設置屬性,並使用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文件中!

我認為這對於尋求解決方案的人很有用。 我很久以前解決了它,但是我忘了在這里更新。 基本上,tomcat將嘗試使用其自己的實現來超越任何XML實現。 我正在使用的tomcat(必須為6.0.23)不包含最新的XML API來處理XSLT轉換(我需要可以處理XSLT2的API)。 實際上,tomcat在這里有一些奇怪的行為,它不會首先從classpath加載類,而是嘗試從其自己的庫(進而可能包含所有必需的Java類)中加載類,這不是自然的加載類順序。 因此,在清單文件中指定將無濟於事。 另一方面,我們可以通過在啟動服務器時將其指定為選項來解決這個問題。 將此選項用作服務器arg

-Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS 

有關更多信息,有關此問題的tomcat 官方文檔

您可以嘗試將Saxon JAR添加到CLASSPATH並使用以下命令加載Saxon:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM