Caught exception while loading file struts-default.xml - [unknown location]

问题:

近期工作中遇到一个很奇葩的情况,

一项目生产环境(weblogic10.3.6 jdk1.6)部署war包,待其节点状态均为活动后,必须重启节点项目才能正常访问。由于没有开发经验苦恼,也没有仔细研究过,只是简单的进行中间件节点的重启项目就能正常访问,然后就搁置到现在

这种操作大大降低了系统的部署效率,同时增加了某尔集团某监控工单的产生。

wKioL1mdKNbDgpecAAB5cPR1UOU849.jpg-wh_50

查看部署日志信息如下,报错信息为Struts2出现的异常

Caused By: Caught exception while loading file struts-default.xml - [unknown location]
        at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(XmlConfigurationProvider.java:1030)
        at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadDocuments(XmlConfigurationProvider.java:167)
        at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.init(XmlConfigurationProvider.java:135)
        at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:239)
        at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:67)
        at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:979)
        at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:446)
        at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:490)
        at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74)
        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter.init(StrutsPrepareFilter.java:56)
        at weblogic.servlet.internal.FilterManager$FilterInitAction.run(FilterManager.java:343)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.FilterManager.loadFilter(FilterManager.java:96)
        at weblogic.servlet.internal.FilterManager.preloadFilters(FilterManager.java:57)
        at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1874)
        at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3155)
        at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1518)
        at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:487)
        at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:427)
        at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
        at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)


解决过程:

1.将项目包在新的环境下部署,情景再现,多次重复部署依然出现该问题,故排除中间件问题

2.查阅资料,将项目包中的xerces-2.9.0.jar删除(版本可能不同),或者直接改名如:xerces-2.9.0.jar.bak(我们只是运维,接触不到项目源代码,故只能拿已编译好的包测试)

3.在上述部署的节点上部署已删除xerces-2.9.0.jar的包,项目能够正常访问


原因:

由于中间件环境为jdk1.6,上述jar包与JDK的功能冲突导致,如若同时有xml-apis.jar包,两个包一并删除。



总结:

      工作中遇到问题要主动去解决,不要躲避同样也不要得过且过,多问度娘多google;测试过程中先还原问题即情景再现,锁定问题点找准方向切入,对比测试。