一、问题再现
在部署工程后,启动工程提示异常信息如下,启动失败,从后台查看是工程加载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都双字节,实在不适用于做网页。”