EAR 文件可能是损坏的或不完整的com.ibm.etools.archive.exception.DeploymentDescriptorLoadException: WEB-INF/web.xml

最近在websphere5.1上部署war包时遇到这样的问题:  消息
EAR 文件可能是损坏的和/或不完整的。

 

后来查看各方面资料,找到了问题所在。在使用标准的dtd方式验证web.xml时,webshpere5对web.xml的验证极为严格,其中的各个元素及其子元素无论是在名称上,还是在顺序上等等都要符合java官方规范,尤其是在出现顺序上。例如在web-app_2_3.dtd中定义<servlet></servlet>元素的定义如下:

<!ELEMENT servlet (icon?, servlet-name, display-name?, description?,
(servlet-class|jsp-file), init-param*, load-on-startup?, run-as?, security-role-ref*)>


那么如果你打算在was5.0中部署WAR包时就必须严格遵照该规范来书写该元素。如果你书写为以下方式:

<servlet>

   <display-name>FetchFile</display-name>
   <servlet-name>FetchFile</servlet-name>
   <description>FetchAnnexServlet</description>  
   <servlet-class>com.egf.servlet.FetchFile</servlet-class>
  </servlet>

那么was5.0仍然会报验证错误,仅仅因为servlet的子元素出现顺序未按照官方规范。应该为以下方式:

<servlet>
   <servlet-name>FetchFile</servlet-name>
   <display-name>FetchFile</display-name>
   <description>FetchAnnexServlet</description>  
   <servlet-class>com.egf.servlet.FetchFile</servlet-class>
  </servlet>

类似的,其他元素也应该遵循相应的规则。

如果在部署时出现该错误,可以参见was的错误日志,并按其错误提示修改相应的元素即可。
 

posted @ 2010-08-28 08:33  chinaifne  阅读(4455)  评论(0编辑  收藏  举报