struts2 Caught exception while loading file struts-default.xml 的错误

本文详细分析了在使用Struts2+Hibernate开发过程中遇到的JDK1.7与Struts2冲突问题,并提供了具体的解决办法,包括删除发布目录下冲突的XML解析包xerces-2.6.2.jar或使用JDK1.7启动Tomcat,确保系统的稳定运行。
MyEclipse 8.5开发JDK1.7和Struts 2冲突的问题真实原因及解决办法 
用Struts 2+Hibernate开发,遇到了 Struts 2+JDK1.7的冲突问题. 

以前在正式环境上发布系统的时候都是直接将tomcat进程杀掉然后重启,这样虽然能够保证不出问题,但是如果tomcat容器发布了多个系统就不行,应该这样会导致其他系统也停止,所以后来就通过tomcat后台管理来发布, 这样虽然能发布上去,但是启动不了,报如下错误: 
Java代码  收藏代码
  1. 严重: Exception starting filter struts2   
  2.   
  3. Caught exception while loading file struts-default.xml - [unknown location]   
  4.   
  5. at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(XmlConfigurationProvider.java:839)   
  6.   
  7. at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadDocuments(XmlConfigurationProvider.java:131)   
  8.   
  9. at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.init(XmlConfigurationProvider.java:100)   
  10.   
  11. at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reload(DefaultConfiguration.java:130)   
  12.   
  13. at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:52)   
  14.   
  15. at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:395)   
  16.   
  17. at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:452)   
  18.   
  19. at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:201)   
  20.   
  21. at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)   
  22.   
  23. at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)   
  24.   
  25. at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)   
  26.   
  27. at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3696)   
  28.   
  29. at org.apache.catalina.core.StandardContext.start(StandardContext.java:4343)   
  30.   
  31. at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3086)   
  32.   
  33. at org.apache.catalina.manager.ManagerServlet.reload(ManagerServlet.java:912)   
  34.   
  35. at org.apache.catalina.manager.HTMLManagerServlet.reload(HTMLManagerServlet.java:523)   
  36.   
  37. at org.apache.catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:113)   
  38.   
  39. at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)   
  40.   
  41. at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)   
  42.   
  43. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)   
  44.   
  45. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)   
  46.   
  47. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)   
  48.   
  49. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)   
  50.   
  51. at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)   
  52.   
  53. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)   
  54.   
  55. at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)   
  56.   
  57. at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)   
  58.   
  59. at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)   
  60.   
  61. at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:852)   
  62.   
  63. at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:584)   
  64.   
  65. at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1508)   
  66.   
  67. at java.lang.Thread.run(Thread.java:619)   
  68.   
  69. Caused by: java.lang.ClassCastException: org.apache.xerces.parsers.XML11Configuration cannot be cast to org.apache.xerces.xni.parser.XMLParserConfiguration   
  70.   
  71. at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source)   
  72.   
  73. at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source)   
  74.   
  75. at org.apache.xerces.jaxp.DocumentBuilderImpl.<init>(Unknown Source)   
  76.   
  77. at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source)   
  78.   
  79. at com.sun.org.apache.xalan.internal.xsltc.trax.SAX2DOM.<init>(SAX2DOM.java:69)   
  80.   
  81. at com.sun.org.apache.xalan.internal.xsltc.runtime.output.TransletOutputHandlerFactory.getSerializationHandler(TransletOutputHandlerFactory.java:187)   
  82.   
  83. at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputHandler(TransformerImpl.java:392)   
  84.   
  85. at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerHandlerImpl.setResult(TransformerHandlerImpl.java:137)   
  86.   
  87. at com.opensymphony.xwork2.util.DomHelper$DOMBuilder.setup(DomHelper.java:213)   
  88.   
  89. at com.opensymphony.xwork2.util.DomHelper$DOMBuilder.<init>(DomHelper.java:198)   
  90.   
  91. at com.opensymphony.xwork2.util.DomHelper$DOMBuilder.<init>(DomHelper.java:189)   
  92.   
  93. at com.opensymphony.xwork2.util.DomHelper$DOMBuilder.<init>(DomHelper.java:175)   
  94.   
  95. at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:115)   
  96.   
  97. at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(XmlConfigurationProvider.java:830)   
  98.   
  99. ... 31 more   
  100.   
  101. 2008-9-19 0:08:34 org.apache.catalina.core.StandardContext start   


第一次启动能运行, 在http://localhost:8080/ch20_Product/showAll.action中reload或start就不行. 

那基本可断定是其他jar包有冲突, 应该是XML解析包有冲突. 

检查发布后的WEB-INF/lib有两个XML解析包: xml-apis.jar和xerces-2.6.2.jar 

这种错误真正原因不是JDK 1.7和Struts 2冲突, 而是 MyEclipse Hibernate 类库中多了包: xerces-2.6.2.jar, 这个包的功能和JDK的冲突了. 解决办法: 1. 删除发布后目录的 WEB-INF/lib/ 下的这个文件; 2. 或者使用JDK 1.7来启动Tomcat 6. 

解决办法 
1>删除发布后的目录下的WEB-INF\lib下的xerces-2.6.2.jar. 
2>停止Tomcat,重新启动就可以,不需要再次发布
在JUnit测试执行过程中,`TestContextManager`的`prepareTestInstance`方法抛出异常通常与Spring测试上下文配置或依赖注入失败有关。这类问题可能由多个因素引起,包括但不限于Spring配置错误、Bean定义缺失或冲突、测试类注解配置不当等。 ### 常见原因及解决方案 1. **ApplicationContext加载失败** 当测试类无法正确加载Spring应用上下文时,会抛出`java.lang.IllegalStateException: Failed to load ApplicationContext`。此类问题通常出现在配置文件路径不正确、缺少必要的注解或依赖版本不兼容的情况下。 解决方案是在测试类上添加`@WebAppConfiguration`注解,以确保Spring能够正确初始化Web应用上下文。此注解可以添加在具体的测试类中,也可以放在测试基类中以便复用[^1]。 2. **找不到符合条件的Bean定义** 异常日志中出现`NoSuchBeanDefinitionException`表明Spring容器无法找到指定类型的Bean,这可能是由于组件扫描路径未正确配置、Bean未被声明或存在多个同名Bean导致冲突。 需要检查Spring配置文件中的`<context:component-scan>`标签是否覆盖了包含目标Bean的包路径,并确保相关类使用了如`@Component`、`@Service`或`@Repository`等注解进行注册[^2]。 3. **配置文件扫描路径冲突** 如果项目中同时存在JUnit4和JUnit5的测试类,并且它们具有相同名称的配置文件,则可能导致Spring测试框架加载了错误的配置文件,从而引发上下文初始化失败。 应避免这种命名冲突,或者明确指定配置文件路径,确保测试类引用的是正确的上下文配置文件。例如,在XML配置文件中指定精确的`base-package`属性,以确保Spring仅扫描预期的目录[^3]。 4. **依赖版本不兼容** 使用特定版本的Spring框架(如4.2.1.RELEASE)时,若与其他库(如JUnit)版本不兼容,也可能导致测试执行失败。建议查阅Spring官方文档确认兼容性,并根据需要升级或降级相关依赖版本。 5. **测试监听器配置错误** 若测试运行期间发生`TestExecutionListener`相关的异常,则可能是某些自定义监听器实现存在问题,或者是Spring测试框架内部逻辑未能正确处理测试生命周期事件。需检查测试监听器实现是否符合规范,必要时可尝试禁用部分监听器以定位问题。 ### 示例:修复Spring测试上下文配置 以下是一个简单的Spring测试类示例,展示了如何正确配置以避免上述问题: ```java @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(locations = {"classpath:spring-config.xml"}) public class EmployeeServiceTest { @Autowired private EmployeeService employeeService; @Test public void testGetEmployee() { assertNotNull(employeeService.getEmployeeById(1L)); } } ``` 在该示例中,`@WebAppConfiguration`启用Web应用上下文支持,`@ContextConfiguration`指定了Spring配置文件的位置,而`@RunWith`则启用了Spring测试框架的支持。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值