您好,登錄后才能下訂單哦!
本篇內容介紹了“xml 解析jar 在oracle linux 下jar包沖突怎么辦”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
收到這個bug后,仔細看了一下日志文件,是在tomcat啟動的時候,spring進行初始化applicationcontaxt.xml,編碼轉換錯誤。
由于這個這個項目在其他平臺是可以運行的,初次判斷是環境問題。
做了如下嘗試
1、發現tomcat的版本是windows版本,所有版本換為相同版本的linxu .
2、發現jdk版本,這本機的不太一樣,換了一個jdk1.8最新的版本。
發現問題依然存在。
做2次思考,既然是編碼問題,那么就改一下編碼:
1、給tomcat啟動參數里添加fileecncoding=UTF-8編碼參數
2、修改linux操作系統編碼
/etc/profile
export LC_ALL="zh_CN.GBK"
export LANG="zh_CN.GBK"
修改
/etc/sysconfig/i18n
LANG="zh_CN.GBK"
LANGUAGE="zh_CN.GBK;zh_CN.GB18030;zh_CN.GB2312;zh_CN"
3、寫了一個jdk一個簡單的程序,讀取操作系統的編碼,以確定 tomcat 能正確的讀取編碼。
問題依然沒有解決
進行第三次思考,仔細看了一下tomcat的日志
Caused by: oracle.xml.parser.v2.XMLParseExceptionpublicId: -//SPRING//DTD BEAN//EN; systemId: http://www.springframework.org/dtd/spring-beans.dtd; lineNumber: 1; columnNumber: 38; Illegal change of encoding: from gb2312 to UTF-8.
仔細的看了一下xmlparser2的代碼,沒有發現異常現象。
又仔細的看了一下applicationcontent.xml,和第一個報錯的文件TopOA_Routine.xml,發現 applicationcontent.xml 文件的編碼格式為utf8,TopOA_Routine.xml的文件格式為gbk,也就是異常里報的gb2312轉utf-8錯誤。大概知道原因,因為第一個是utf-8,所以后面的都按照utf-8處理了。
推斷:操作系統在讀取文件,或線程共享的時候,做了一些處理。
總結:如果是java項目,非特殊要求,全部都utf8,數據,項目代碼,資源文件。至于說大部分操作系統都能成功處理,個別無法處理,只能說測試未完全覆蓋。
最后標注一下環境tomcat9.0.12,jdk1.8.0_212-b10,操作系統在centos ,ubuntu是OK的,在 Oracle Linux Server release 6.4
問題最終解決:
造成這個錯誤的原因時jar包沖突
javax.xml.parsers.DocumentBuilder 的實現jar包有xmlparser2.jar和 xml-apis , xercesImpl-2.8.1.jar 里
問題的發生時因為 oracle linux 在加載jar包的時候,不知道為什么優先加載的xmlparser2.jar所以報錯了。
解決方案:-Xbootclasspath/p:/lib/xercesImpl-2.8.1.jar
使用Xbootclasspath 指定 xercesImpl優先加載,問題解決。
“xml 解析jar 在oracle linux 下jar包沖突怎么辦”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。