2009-07-02 25 views
0

我有一段代碼可以單獨工作,但在客戶端項目中使用依賴失敗。致電如何在DOMImplementation的版本上調試java depenendency失敗

Document doc = impl.createDocument(null,null,null);

失敗(看起來像http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4913257的問題)。我的單元測試中的'impl'實例是com.sun.org.apache.xerces.internal.dom.DOMImplementationImpl的一個實例。在我的客戶端代碼中,它是org.apache.xerces.dom.DOMImplementationImpl的一個實例。

如何追溯此依賴關係?我試過手動檢查類路徑中的所有類和jar文件,但找不到org.apache.xerces.dom.DOMImplementation的提供者。是否有可能觀察何時加載類(以及爲什麼)?如何選擇特定的DOM實現?我現在可以強制jvm使用特定的實現嗎?

回答

1

在實施「com.sun.org.apache ......」包是真實打包爲JRE的一部分了Xerces。開始「org.apache ...」的是Apache的獨立發行版。它們可以在同一應用程序中一起運行,但可能會讓人感到困惑。

您的客戶端項目似乎包含獨立Apache發行版的副本(可能是xercesImpl.jar)。詢問他們是否要使用內置的JRE代碼進行修改。

+0

這很有道理。現在問題來到哪個jar有apache發行版。在類路徑中沒有xercesImpl,我找不到哪個jar包含org.apache.xerces。*類。使用-Djaxp.debug = true運行打印 JAXP:使用ClassLoader發現jar資源= META-INF/services/javax.xml.parsers.DocumentBuilderFactory:[email protected] 但是它遺憾地沒有說哪個罐子。 – eaubin 2009-07-02 15:57:03

0

最有可能你沒有xercesImpl.jar在客戶端項目的類路徑