在使用dom4j時碰到乙個classcastexception問題:org.dom4j.documentfactory不能轉換為org.dom4j.documentfactory。
同乙個類不能相互轉換,一般是由於這是兩個分別由不同類載入器載入的類的緣故。
為什麼會從兩個地方的jar包分別載入同乙個類呢?這有點奇怪,於是看了下dom4j的原始碼,發現問題在documentfactory的載入機制上。
documentfactory的實現類可以由使用者自己指定,因此程式中選擇通過contextclassloader進行載入,這是合理的,使用者指定的類應該是可以通過當前執行緒的載入器載入。
問題出在:在share中的乙個類使用到了dom4j,於是share載入了dom4j中的所有類。
該實現再使用顯示轉換成share所載入的documentfactory類的例項,這樣就發生異常了。
解決方法:
1.當然是只在乙個地方放置dom4j的包。
2.這種情況不能完全避免,因此也可以在使用dom4j是顯示地設定documentfactory例項,這樣程式就不會再去載入該類了。
3.其實dom4j本身也可以改進一下,檢查到使用者指定的類以org.dom4j.開頭則由當前載入器載入,其他的才通過contextclassloader進行載入。
擴充套件:在程式中使用到contextclassloader載入類的地方也都最好進行檢查,如果屬於本jar包中的類則改用當前載入器載入。
dom4j 使用dom4j生成xml
使用org.dom4j.element 建立xml 生成service.xml檔案 param tran 交易物件 param filepath 資料夾路徑 public static void exportservicexml listtranlist,string filepath servic...
dom4j簡單使用
公司這邊是用dom4j,主要是用來解析xml的,一般有這麼幾個操作 1.建立xml文件 org.dom4j.document doc documenthelper.createdocument 2.建立根元素並新增 element root documenthelper.createelement ...
dom4j使用總結
1.載入xml 從檔案載入 saxreader reader new saxreader string filepath xmlfile filename xml document document null try catch documentexception e return document...