本篇內(nèi)容介紹了“xml 解析jar 在oracle linux 下jar包沖突怎么辦”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
洞頭網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站設(shè)計(jì)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)自2013年起到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
收到這個(gè)bug后,仔細(xì)看了一下日志文件,是在tomcat啟動(dòng)的時(shí)候,spring進(jìn)行初始化applicationcontaxt.xml,編碼轉(zhuǎn)換錯(cuò)誤。
由于這個(gè)這個(gè)項(xiàng)目在其他平臺(tái)是可以運(yùn)行的,初次判斷是環(huán)境問(wèn)題。
做了如下嘗試
1、發(fā)現(xiàn)tomcat的版本是windows版本,所有版本換為相同版本的linxu .
2、發(fā)現(xiàn)jdk版本,這本機(jī)的不太一樣,換了一個(gè)jdk1.8最新的版本。
發(fā)現(xiàn)問(wèn)題依然存在。
做2次思考,既然是編碼問(wèn)題,那么就改一下編碼:
1、給tomcat啟動(dòng)參數(shù)里添加fileecncoding=UTF-8編碼參數(shù)
2、修改linux操作系統(tǒng)編碼
/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、寫(xiě)了一個(gè)jdk一個(gè)簡(jiǎn)單的程序,讀取操作系統(tǒng)的編碼,以確定 tomcat 能正確的讀取編碼。
問(wèn)題依然沒(méi)有解決
進(jìn)行第三次思考,仔細(xì)看了一下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.
仔細(xì)的看了一下xmlparser2的代碼,沒(méi)有發(fā)現(xiàn)異?,F(xiàn)象。
又仔細(xì)的看了一下applicationcontent.xml,和第一個(gè)報(bào)錯(cuò)的文件TopOA_Routine.xml,發(fā)現(xiàn) applicationcontent.xml 文件的編碼格式為utf8,TopOA_Routine.xml的文件格式為gbk,也就是異常里報(bào)的gb2312轉(zhuǎn)utf-8錯(cuò)誤。大概知道原因,因?yàn)榈谝粋€(gè)是utf-8,所以后面的都按照utf-8處理了。
推斷:操作系統(tǒng)在讀取文件,或線(xiàn)程共享的時(shí)候,做了一些處理。
總結(jié):如果是java項(xiàng)目,非特殊要求,全部都utf8,數(shù)據(jù),項(xiàng)目代碼,資源文件。至于說(shuō)大部分操作系統(tǒng)都能成功處理,個(gè)別無(wú)法處理,只能說(shuō)測(cè)試未完全覆蓋。
最后標(biāo)注一下環(huán)境tomcat9.0.12,jdk1.8.0_212-b10,操作系統(tǒng)在centos ,ubuntu是OK的,在 Oracle Linux Server release 6.4
問(wèn)題最終解決:
造成這個(gè)錯(cuò)誤的原因時(shí)jar包沖突
javax.xml.parsers.DocumentBuilder 的實(shí)現(xiàn)jar包有xmlparser2.jar和 xml-apis , xercesImpl-2.8.1.jar 里
問(wèn)題的發(fā)生時(shí)因?yàn)?oracle linux 在加載jar包的時(shí)候,不知道為什么優(yōu)先加載的xmlparser2.jar所以報(bào)錯(cuò)了。
解決方案:-Xbootclasspath/p:/lib/xercesImpl-2.8.1.jar
使用Xbootclasspath 指定 xercesImpl優(yōu)先加載,問(wèn)題解決。
“xml 解析jar 在oracle linux 下jar包沖突怎么辦”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!