工作总结32 xfire-servlet.xml项目启动加载时报cvc-elt.1:找不到元素“beans”的声明

来源:互联网 发布:tensorflow 视频教程 编辑:程序博客网 时间:2024/05/22 06:43

今天给客户做了一个xfire webservice接口,文件xfire-servlet.xml的文件开头声明的是DTD文件,项目跑在Tomcat是没有问题的,网络是局域网,但是部署在websphere服务器上就会报报: Caused by: org.xml.sax.SAXParseException: cvc-elt.1:找不到元素“beans”的声明。

百度了下,网上有个解决方法就是:【通过加JVM参数-Dibm.stream.nio=true解决,该问题在6.1.0.23上出现,在6.1.0.29未出现。】,但是websphere的控制台又会抛出:[ServletException in:cure/isclite/tiles/iscnavigatorLayout.jsp] null',控制台又没法使用了。网上说这是websphere在6.1的bug,需要通过升级补丁或者升级版本来解决。引用:IBM在JDK 1.4版本中为了追求对io通道的高效率改变了JDK 1.3中对io通道中异常处理的策略。IBM JDK 1.4中对于io通道的异常处理更加严格,因此系统中会报上面的错误。  解决这一问题的办法是不使用IBM JDK 1.4中默认的io通道,而使用nio通道。设置JVM-Dibm.stream.nio=true 。

    引用:通过查阅资料,其实这是websphere7 之前的BUG,目前只能通过打补丁来解决,大家可以上网查下BUG号PK16869。IBM的官方网站说明这个BUG要到WEBSPHERE 7才能解决。

    现在的解决方法是:不添加JVM-Dibm.stream.nio=true,通过吧xfire-servlet.xml的文件声明缓存xsd文件声明:

   <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> 

这样就可以解决了上面的beans找不到的声明。spring2.5.6.jar多xsd做了特殊处理,说明如下:

             spring在加载xsd文件时总是先试图在本地查找xsd文件(spring的jar包中已经包含了所有版本的xsd文件),如果没有找到,才会转向去URL指定的路径下载。这是非常合理的做法,并不像看上去的那样,每次都是从站点下载的。事实上,假如你的所有配置是正确定的,你的工程完全可以在断网的情况下启动而不会报上面的错误。

阅读全文
0 0
原创粉丝点击