1. 程式人生 > >一個XML解析失敗排查過程的分享

一個XML解析失敗排查過程的分享

這篇文章雖然沒有解決我的問題,但是解析過程非常精彩,值得學習

今天遇到一個比較詭異的問題, 我們的應用在JBoss下可以正常部署, 到Jetty環境下則部署失敗,並提示如下資訊:

2011-06-14 18:14:34.812:WARN::Failed startup of context [email protected]{/,src/main/webapp}org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 37 in XML document from ServletContext resource [/WEB-INF/webx.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'services:webx-configuration'.    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:404)    <中間略去若干行>2011-06-14 18:14:34.814:WARN::Nested in org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 37 in XML document from ServletContext resource [/WEB-INF/webx.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'services:webx-configuration'.:org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'services:webx-configuration'.    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)    at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)    at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75)    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396)    <中間略去若干行>2011-06-14 18:14:34.829:INFO::Started 
[email protected]
:80


上面花了大篇幅貼上錯誤日誌,只是想留個紀念。

出現這個問題,首先懷疑到的是環境是不是有問題。檢查了一會兒,沒有頭緒。換個思路看看,瞅瞅這兩天有哪些檔案變更。(小注:之前一直執行正常)。通過觀察SVN日誌,發現最近有新引入了一個包(且記為A.jar)。或許這就是問題所在。

我們的工程是用Maven進行依賴管理的,所以接著我在POM中將新引入的A.jar移除,再次部署應用,果然正常啟動。但是A.jar可能別的同事在用,不能草率的移除了事。並且我斷定不是A.jar本身,而是其帶來的間接依賴導致上述的問題。

緊接著我需要做的是揪出A帶來的間接依賴中的哪一個導致XML解析失敗。

首先我打印出了增加A.jar和移除A.jar後的依賴樹,命令如下:

mvn dependency:tree > with_a

mvn dependency:tree > without_a

然後用BeyondCompare比對with_a和without_a兩個檔案的差異內容,因為A的依賴關係很複雜,所以單純肉眼,分辨不出哪個依賴出了問題,只好放棄了這條路子。

後面又仔細閱讀了一遍錯誤日誌,然後縮小搜尋範圍,因為從字面上看,不外乎與XML和Spring相關。於是排查了Spring版本是否正常,並確定和Spring無關。那隻能是XML相關的依賴導致問題了。

再次檢視工程依賴樹,和XML解析相關的包大致有:xml-apis、xml-resolver、xmlParserAPIs、xercesImpl等。這回還真有所收穫,發現因為A的引入,導致了xercesImpl的版本降級。在引入A之前的xercesImpl版本為2.9.1、引入A後則變為2.4.0. 趕緊排除A中的xercesImpl,部署應用,正常啟動,搞定收工。

這也解釋了為什麼Jboss可以正常部署,因為Jboss自帶了xercesImpl-2.7.1.


相關推薦

一個XML解析失敗排查過程分享

這篇文章雖然沒有解決我的問題,但是解析過程非常精彩,值得學習 今天遇到一個比較詭異的問題, 我們的應用在JBoss下可以正常部署, 到Jetty環境下則部署失敗,並提示如下資訊: 2011-06-14 18:14:34.812:WARN::Failed startup

一次頻繁Full GC問題排查過程分享

問題描述 應用收到頻繁Full GC告警 問題排查 登入到對應機器上去,檢視GC日誌,發現YGC一分鐘已經達到了15次,比Full GC還要頻繁一些,其中Full GC平均10分鐘超過了4次,如下圖 使用jstat -gcutil 5280 1000檢視實時GC情況,年老代採用的是CMS收集器,發現觸

記crond導致備份失敗排查過程

備份系統 對比 ron 不知道 手動 而不是 產生 自己 數據庫      今天上班的路上收到一條短信,顯示線上所有實例備份都失敗了。備份失敗是大事,於是到公司的第一件事兒就是排查備份失敗的原因。   這兩天遷移了數據庫管理平臺,當然涉及到數據庫備份功能,備份失敗肯定和平

一個bug的排查過程---復盤

菜單項 註意 解決 做了 微信公眾號 排查過程 文本 結果 sql錯誤 公眾號做了新需求:菜單的click事件,支持多條客服消息。 上線後,只有一個功能不好使,是點擊菜單,預期發一條文本類型的客服消息。 實際操作時,點這個菜單項後,什麽也沒有發生。elk上看日誌,也沒有

利用一個xml佈局檔案生成出一張圖片以分享給好友

關於動態生成一張圖片 動態生成一張圖片,有兩種方法。一種方式是利用Canvas畫圖,這種方式的關鍵技術點是絕對定位和動態比例尺,用習慣了,寫起來也不難。缺點嘛自然是不直觀,改動也不方便。還一種方式是利用xml佈局,最後將圖片匯出來。封裝好工具類之後,使用起來則非常方便。寫xml的時候呢,可以使用

Spring Framework框架解析(1)- 從圖書館示例來看xml檔案的載入過程

引言 這個系列是我閱讀Spring原始碼後的一個總結,會從Spring Framework框架的整體結構進行分析,不會先入為主的講解IOC或者AOP的原理,如果讀者有使用Spring的經驗再好不過。鑑於每個人對原始碼閱讀角度的不同,如果文中存在理解有誤的地方希望讀者能夠及時提出,共同進步。文章所分析的原始碼

Oracle DB 12.2(12cR2)的一個新特性:硬解析失敗的SQL語句(需要符合一定條件)列印到alert_sid.log中.

How to Identify Hard Parse Failures (Doc ID 1353015.1)Bug 16945190 - Diagnostic enhancement to dump parse failure information automatically (Doc ID 1694519

Oracle DB 12.2(12cR2)的一個新特性:硬解析失敗的SQL語句(需要符合一定條件)打印到alert_sid.log中.

erro p s doc oracl 12c ica oracle fail err How to Identify Hard Parse Failures (Doc ID 1353015.1)Bug 16945190 - Diagnostic enhancement to

MySQL-記一次備份失敗排查過程

          山竹來臨,窩在家裡整理個人文件。        本篇文章主要講解排查問題的思路,涉及linux 刪除檔案的原理、例項誤刪資料恢復、MySQL例項初始化引數優先級別等,雖然涉及知識點比較淺,但是個人覺得挺有意思的,所以翻出筆記釋出出來。  1 備份出錯咯

Android xml解析到View的過程

分析 View 系列 原始碼分析 前言,一些必須知道的知識 API 版本 27 我們先看看 AppCompatActivity 的跟這次主題相關的 重要方法 public class AppCompatActivity ...{ @Overrid

寫了一個mircro XML解析器,附原始碼

不喜歡看人廢話喜歡直奔主題的是同學可以直接: goto 附件下載。   mirco 的意思是比 tiny 還要 tiny。   GUI 模板用 XML 做是最合適的。方便嵌入指令碼,方便編輯修改,方便嵌入面板描述,用 XML 做模板,寫起 GUI 編輯器也要方便得多。   以前幾個的 GUI 模板解

如何在WebService接收一個XML檔案並解析,客戶端如何傳送這個XML檔案?急求簡單程式碼示例。。

客戶端 xmlHttp = null; if (window.XMLHttpRequest) { // If IE7, Mozilla, Safari, and so on: Use native object. xmlHtt

分享一個安裝Vs2015失敗的解決方案,報錯為系統找不到指定路徑

前天準備花點時間複習一下c++,順便寫點東西,開啟VS2015,準備新建專案的時候傻眼了,我沒有安裝c++的元件,之前做的都是Unity相關的,為了省空間就安裝了一個c# 然後就是解除安裝重灌,但是發現怎麼都裝不上,系統提示找不到指定的路徑 後續網上找各種解決方案,包括使用

一個SQL導致整個資料庫很卡的問題及排查過程

問題:我執行了一個sql,五六分鐘沒有執行成功,然後我就ctrl +c,沒成功,然後我就kill,之後顯示成功,但是處於killed狀態,事務還在。這是一個從庫,那之後從庫應用的sql,也就是一個很簡單的插入sql,跟我執行的sql沒有任何關聯關係,也執行不了了,主從也就發生

TinyXML:一個優秀的C++ XML解析

讀取和設定xml配置檔案是最常用的操作,試用了幾個C++的XML解析器,個人感覺TinyXML是使用起來最舒服的,因為它的API介面和Java的十分類似,面向物件性很好。 TinyXML是一個開源的解析XML的解析庫,能夠用於C++,能夠在Windows或Linux中編譯。這個解析庫的模型通過解析XML檔案,

瀏覽器的解析和執行過程

們的 由於 繼續 動畫 table 就會 內嵌 cnblogs 內嵌腳本 當瀏覽器獲得一個html文件時,會“自上而下”加載,並在加載過程中進行解析渲染。 解析: 1. 瀏覽器會將HTML解析成一個DOM樹(display:none,visibility:hidden)。

聲明了一個模塊和一個控制器AngularJS的處理過程

say 作用域 col 如何 負責 log cto 引用傳遞 nbsp 例如下面這段代碼。這是一個簡單的應用,聲明了一個模塊和一個控制器: angular.module(‘myApp‘, []) .factory(‘greeter‘, function() {

筆記:XML-解析文檔-流機制解析器(SAX、StAX)

輸入 tex 字符數 表示 getname 重要 樹形 puts ron DOM 解析器完整的讀入XML文檔,然後將其轉換成一個樹型的數據結構,對於大多數應用,DOM 都運行很好,但是,如果文檔很大,並且處理算法又非常簡單,可以在運行時解析節點,而不必看到完整的樹形

XML 解析---dom解析和sax解析

靜態 open 轉換器 tno 抽象 imp 高速 default 內容 眼下XML解析的方法主要用兩種: 1、dom解析:(Document Object Model。即文檔對象模型)是W3C組織推薦的解析XML的一種方式。 使用dom解析XML文檔,該解析器會先

cocos2d-x 中XML解析與數據存儲

lba false 網上 unsigned failed popu new ccm cfile 一不小心就玩了一周的遊戲了。哎。玩的時候時間過得總是這麽快。。。 於是今天決定看一下之前不怎麽非常熟悉的XML;(之前做遊戲時數據的儲存用到過XML,但這塊是還有一個同事在做