Caught exception while loading file struts-default.xml - [unknown location]
问题:
近期工作中遇到一个很奇葩的情况,
一项目生产环境(weblogic10.3.6 jdk1.6)部署war包,待其节点状态均为活动后,必须重启节点项目才能正常访问。由于没有开发经验苦恼,也没有仔细研究过,只是简单的进行中间件节点的重启项目就能正常访问,然后就搁置到现在
这种操作大大降低了系统的部署效率,同时增加了某尔集团某监控工单的产生。
查看部署日志信息如下,报错信息为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;测试过程中先还原问题即情景再现,锁定问题点找准方向切入,对比测试。
转载于:https://blog.51cto.com/rhelanker/1958673