2014-09-10 41 views
0

我的軟件需要兩個TransformerFactory實現。我必須爲PDF處理xml和xls/fo(格式化對象)。對於我們希望使用用戶定義的xsl函數的軟件的更新版本,我使用了直接在源代碼中引用的net.sf.saxon.TransformerFactoryImpl。由於數據庫中的舊數據需要使用org.apache.xalan.processor.TransformerFactoryImpl處理舊數據,因此saxon會拋出一個錯誤並且不會呈現PDF。在Wildfly 8.1中設置javax.xml.transform.TransformerFactory

當使用Tomcat時,我只需將「-Djavax.xml.transform.TransformerFactory = org.apache.xalan.processor.TransformerFactoryImpl」設置爲vm參數,這是沒有問題的。

當使用Wildfly設置VM參數會導致wildfly拋出以下異常: 「在線程異常‘主要’javax.xml.transform.TransformerFactoryConfigurationError:提供org.apache.xalan.processor.TransformerFactoryImpl找不到」

xalan.jar包含在我的war文件中。 xalan的jboss特定版本是Wildlfy發行版的一部分。

爲什麼沒有找到?爲什麼Wildfly甚至試圖在啓動野蠻服務時加載工廠? 如何在啓動過程中配置Wildfly以查找xalan變壓器工廠?將模塊條目編寫到standalone.xml或domain.xml中並沒有幫助。

我知道Wildfly中有一個錯誤,說變壓器工廠的重定向不指向Wildfly變壓器工廠,而是指向java缺省值。我認爲這不應該對我的問題有任何影響,因爲我嘗試設置另一個默認值。

任何幫助?

回答

0

我和JBoss 7有類似的問題,它似乎與Wildfly也是一樣的問題。 只是瘋狂的猜測:JBoss在啓動時加載它的配置文件,並將它們保存在關機(不知道爲什麼,但如果你在JBoss運行時對standalone.xml進行任何修改,你會看到在關機時它們被覆蓋)。我猜JBoss需要使用一個轉換器來保存它的配置文件(standalone.xml),這就是爲什麼它在啓動時加載轉換器(甚至在模塊配置被分析之前,看到有一個xalan庫被添加到classpath和在部署戰爭文件之前)。但正如我所說,這只是一個猜測......我可能完全錯誤。

爲了擺脫啓動錯誤,您必須將xalan庫放置在您的$ JAVA_HOME/jre/lib/ext中(這樣您可以將它提供給所有應用程序),或者您可以停止使用系統屬性-Djavax.xml.transform.TransformerFactory並在standalone.xml文件中添加下一個屬性。

<system-properties> 
    <property name="javax.xml.transform.TransformerFactory" value="org.apache.xalan.xsltc.trax.TransformerFactoryImpl"/> 
</system-properties> 
+0

非常感謝。我會試一試。 – 2014-09-23 12:08:24

+0

由於WildFly和JBoss模塊系統處理JAXP的方式,此解決方案將無法正常工作。應該使用線程的上下文類加載器來定位提供者;由於某種原因,它不是或它工作不正確。 – 2016-01-04 21:26:13

相關問題