weblogic对xml中BOM处理异常——org.xml.sax.SAXParseException:Content is not allowed in prolog

来源:互联网 发布:工控软件下载 编辑:程序博客网 时间:2024/05/01 15:21

一、问题再现

        在部署工程后,启动工程提示异常信息如下,启动失败,从后台查看是工程加载DWR下*sqlmap.xml文件失败。

 

二、问题解决过程

         1)确认了问题就是工程中的某些xml编写不规范导致weblogic部署过程中不能正确识别其为xml文件导致了异常。大致方向确认后再到MyEclipse中查看工程SVN更新的历史信息,检查最近几次提交的变更中影响的xml文件是否存在注释 <!-- --> 前后不空格,或中间是汉字,没有换行导致乱码影响注释的问题。将文件注释统一修改为

英文:

<!--    helloWorld!   -->

中文:

<!--

     中文注释

--> 

        修改完后,重新编译打包上传测试库主机,重新部署问题依然存在,可排除注释导致该异常发生。

 

        2)发布的是全量工程,奇怪的是上一个全量版本发布都是正常的,因为时间间隔短,较上一个版本变更较少,利用文件比对工具对工程classes目录进行内容比对,查看差异的xml文件

经过比对找到差异的xml文件

 

看到两个地方存在差异,一个是左侧的文件说明信息中多了一个“物料清单”字样,一个是xml文件头显示有差异,但是比对之后没有发现有差异的字母或标识。猜测可能是文件属性的问题,在MyEclipse中查看文件属性,发现文件编码格式下方多了一个BOM的标识。关于BOM的在问题延伸中进行描述,从网上查看发现xml文件头中不能带BOM,否则weblogic就不能正常解析该文件为xml文件。为此在UE中打开文件,另存为 UTF-8(无BOM) 格式。覆盖工程中的文件,上传SVN,编译上传测试主机,部署正常。

 

三、问题延伸

      参考 http://blog.csdn.net/muye0503/article/details/41696309

                http://blog.csdn.net/rainysia/article/details/7455275

      BOM其实是在UTF-16和UTF-32中使用的,为了统一也在UTF-8中引入BOM。

      参考 http://www.zhihu.com/question/20167122

      “在网页上使用BOM是个错误。BOM设计出来不是用来支持HTML和XML的。要识别文本编码,HTML有charset属性,XML有encoding属性,没必要拉BOM撑场面。虽然理论上BOM可以用来识别UTF-16编码的HTML页面,但实际工程上很少有人这么干。毕竟UTF-16这种编码连ASCII都双字节,实在不适用于做网页。”

 

 

0 0
原创粉丝点击