首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

MyEclipse 6 下 JDK 6 與 Struts 2 衝突真相:XML 解析器 Jar 包重複導致

     編輯:Java 相關知識

錯誤現象

專案首次啟動正常,但 Reload 或重啟後拋出 ClassCastException: org.apache.xerces.parsers.XML11Configuration cannot be cast to org.apache.xerces.xni.parser.XMLParserConfiguration,導致 Struts 2 核心配置 struts-default.xml 載入失敗。

根本原因排查

  1. 嘗試 Struts 2 官方 Blank 專案 → 正常,排除 Struts 2 與 JDK 6 本身不兼容
  2. 檢查發布後 WEB-INF/lib 發現兩個 XML 解析器 Jar:xml-apis.jar、xerces-2.6.2.jar
  3. 追溯來源:MyEclipse 自帶 Hibernate 3.2 Core Library 內含這兩個 Jar
  4. JDK 6 已內建 Xerces/Xalan,外部舊版 Jar 與 JDK 內建類衝突(類加載器優先加載 WebApp 裡的 Jar,導致版本不匹配)

解決方案

方案一:移除衝突 Jar(推薦)

  1. 專案屬性 → Java Build Path → Libraries,移除 MyEclipse Hibernate 3.2 Core Library
  2. 移除庫步驟
  3. 手動複製所需 Hibernate Jar 到 WEB-INF/lib,**排除 xml-apis.jar 與 xerces-2.6.2.jar**
  4. 停止 Tomcat,清理發布目錄下的兩個衝突 Jar,重新發布

方案二:降級 JDK

改用 JDK 1.5 啟動 Tomcat 6,避開 JDK 6 內建解析器衝突(不推薦,治標不治本)。

最佳實踐建議

不要依賴 IDE 自帶庫。MyEclipse 內置庫版本老舊、易衝突。建議:
  • 從官網下載 Hibernate、Struts、Spring 等框架正式發布版
  • 使用 Maven/Gradle 管理依賴,避免手動複製 Jar 遺漏或版本不一致
  • 定期清理 WEB-INF/lib,排除傳遞性依賴帶來的重複 Jar

關鍵堆棧片段

Caused by: java.lang.ClassCastException: 
  org.apache.xerces.parsers.XML11Configuration cannot be cast to 
  org.apache.xerces.xni.parser.XMLParserConfiguration
  at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source)
  at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(...)
  at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:115)
  at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(...)
  at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:201)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved