WebSphere从Windows迁移至Linux出现org.dom4j.DocumentException异常:Nested exception: prolog 中不允许有内容
2013年的元旦,因为项目上线要加班,所以没有放假。可是,就在这几天,Web系统突然出现了严重异常。。。
系统开发和测试基本都结束了,等着从测试环境向正式环境迁移。就在元旦前一天,一个严重的异常出现了,异常信息如下:
Caused by: org.dom4j.DocumentException: Error on line 1 of document : prolog 中不允许有内容。 Nested exception: prolog 中不允许有内容。
at org.dom4j.io.SAXReader.read(SAXReader.java:355)
at org.dom4j.io.SAXReader.read(SAXReader.java:271)
at org.dom4j.DocumentHelper.parseText(DocumentHelper.java:215)
... 56 more
因为服务器是刚买的,系统都是新装的,并且Java程序都是跨平台的,在Windows下和Linux下都可以运行的,理论上来说应该没有什么问题,以前也做过Windows和Linux的迁移。
于是,我们把项目从测试的Windows环境迁移到Linux环境,都是同一个厂家的服务器,JDK、WebSphere版本都一样,应用程序版本也一致。
这个异常出现的位置是在数据库里的表单往页面加载的时候出现的,数据库里的数据没有问题,用Windows上的程序已经测试通过了,基本确定是项目部署环境的问题。还有一个功能有问题,流程图显示不出来。看起来没什么联系,唯一的联系就是数据都是大字段保存在数据库里的。
发现了异常之后,我重装了好几遍JDK和WebSphere的环境,Web系统里的功能测试都正常,除了表单加载和流程图显示的功能。实在想不到会有什么原因可以导致这么诡异的异常出现,毕竟整个系统只有2个功能不好用。
4号项目就正式使用了,时间很紧迫啊。为了减少操作系统差异的可能性,我们也把Linux重装了Windows,发现问题仍然存在,这样就更确定也不是操作系统的原因导致出现异常,但是依然找不到具体原因。
几乎绝望了,给项目负责人打了电话说了紧急情况,到时候客户要是追究好提前有个准备,双机Linux环境不能上线使用了,毕竟也算是一次意外事故吧。
晚上,项目组吃过饭说要去看二人转,我突然有了一种预感觉得可以找到解决问题的办法。于是半路抄小道溜回去加班了,不一会儿就找到了问题所在。
原因是由于Oracle的ojdbc14.jar文件不一致,正式环境的jar文件也是ojdbc14.jar,但是比测试环境的文件要小一些,只有1.14M。正式环境是使用其他的服务器远程搭建好的,Oracle的jar包也是用的远程服务器的,其他项目也用的是那个jar包,的确很难想到数据库驱动包会出问题,毕竟系统那么多功能就2个不能用。
还好,总算找到问题的原因了。找到原因之后,我就将ojdbc14.jar文件重新发布到正式环境测试,最后问题顺利得到解决。虽然花了两天时间,找到原因也总算没白忙活。
小 结:有时候,解决问题也需要一些灵感,可能就在那一刹那间。