本篇内容介绍了“xml 解析jar 在oracle linux 下jar包冲突怎么办”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
洞头网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。成都创新互联自2013年起到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联。
收到这个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包冲突怎么办”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!