2011-01-18 52 views
25

我正在開發一個使用JSF 2.0,NetBeans 6.9.1,GlassFish Server 3.1,mojarra 2.0.3和JasperReports 3.7.6的Web應用程序。包含在我的項目庫中的是jar文件「xerces-2.8.0.jar」。這個文件是作爲JasperReports jar文件庫的一部分導入的。每當我嘗試部署,運行,或通過NetBeans的調試我的項目,我收到此錯誤:Xerces錯誤:org.apache.xerces.impl.dv.dtd.DTDDVFactoryImpl

java.lang.Exception: java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! DTD factory class org.apache.xerces.impl.dv.dtd.DTDDVFactoryImpl does not extend from DTDDVFactory. 

在我的項目我的生成失敗的任何更改後,我收到上述錯誤,當我嘗試部署,運行或調試它。我必須重新啓動服務器並再次運行/調試。我搜索了互聯網,找不到解決這個問題的辦法。我查看了這個jar文件,DTDDVFactoryImpl的確從DTDDVFactory擴展 - 我不知道爲什麼我收到這個錯誤。雖然我最終可以讓我的項目運行,但如果我沒有收到此錯誤,它會更好。

任何人都可以請告訴我如何解決這個問題嗎?我是否需要從我的項目庫中刪除此文件?我需要用更新的版本/舊版本更新此文件嗎?

+0

嗨,你有沒有發現修復? – Osw 2011-04-24 14:55:00

+1

我沒有。我以爲我想到了。項目中有多個Xerxes jar文件。我想通過刪除多餘的東西來解決問題。我錯了。它繼續經常給我這個錯誤。 – Sean 2011-05-11 21:48:05

回答

22

如果你提供了你自己的xerces.jar,你必須通過Endorsed Standards Override Mechanism(java -Djava.endorsed.dirs=/path/to/xerces.jar)來做到這一點,你不能將它添加到類路徑中(並且如果你遲早會遇到麻煩做)。讓我解釋。

JAXP是Java API for XML Processing。通過factory/factory-method pattern完成JAXP對象(如解析器,XSLT transfomers,DOM文檔)的創建,因此您可以插入新的JAXP實現(它必須比JRE中提供的實現更新)。 Xerces提供JAXP實現(的一部分)幷包含認可的標準(認可的標準是通過除Java社區過程以外的標準過程定義的Java API,請參閱Endorsed Standards Override Mechanism)。如果你不使用ESOM,你會遇到各種麻煩。

0

與Glassfish一起使用Selenium時出現此錯誤。我周圍有由selenium/libs/複製XML罐(xerces-*, xalan-*, xml-apis*, serialize*)到$AS_HOME/lib/endorsed(GlassFish具有2)或$AS_HOME/glassfish/lib/endorsed對於GlassFish 4.