无法在ClassReader中加载由ArrayIndexOutOfBoundsException引起的ApplicationContext

当我运行junit测试类时,出现以下exception? 我怎么解决这个问题?

Failed to load ApplicationContext java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:157) at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109) at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) Caused by: java.lang.ArrayIndexOutOfBoundsException: 8 at org.springframework.asm.ClassReader.readUnsignedShort(Unknown Source) at org.springframework.asm.ClassReader.(Unknown Source) at org.springframework.asm.ClassReader.(Unknown Source) at org.springframework.asm.ClassReader.(Unknown Source) at org.springframework.core.type.classreading.SimpleMetadataReader.(SimpleMetadataReader.java:48) at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:80) at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:101) at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:76) at org.springframework.context.annotation.ConfigurationClassUtils.checkConfigurationClassCandidate(ConfigurationClassUtils.java:70) at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:233) at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:203) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:617) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:446) at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:103) at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:1) at org.springframework.test.context.support.DelegatingSmartContextLoader.loadContext(DelegatingSmartContextLoader.java:228) at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:124) 

我的考试class是

 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations="classpath:dispatcher-servlet.xml") public class CandidateDAOImplTest{ @Autowired public CandidateDAO candidateService; @Test public void testGetCandidate() {...} } 

调度员servlet.xml中

            mymessages      database.properties                            

它位于web / WEB-INF / dispatcher-servlet.xml。
我正在使用netbeams ied 7.3和glassfish server 3.0

很可能你的一个春豆里面有lambda表达式。 显然,如果代码中有某个lambda,则spring 3 beans无法初始化。 如果不能选择迁移到spring 4,请尝试使用匿名类重写lambda表达式,例如

 Function lambda = new Function() { public B apply(A s) { ... } } 

或者将lambda代码移出spring bean。 我有同样的问题,它帮助了我,我仍然可以使用jre / jdk 8的spring 3。

避免这种失败:

  Caused by: java.lang.ArrayIndexOutOfBoundsException: 10348 at org.springframework.asm.ClassReader.(Unknown Source) 

您尚未说明您使用的是哪种JDK。 如果您使用的是1.8,那么您可能会发现需要将Spring升级到4。

请参阅此问题的答案: Java 1.8 ASM ClassReader无法解析类文件 – 可能是由于尚未支持的新Java类文件版本

问题是您的xml文件的位置。 WEB-INF不是类路径的一部分。 尝试将其复制到“src”文件夹下。

尝试将文件放在src文件夹下。 然后将它复制到WEB-INF / classes文件夹。 然后,您可以将其称为classpath:dispatcher-servlet.xml。 如果文件不直接位于classes目录下,那么您不能在测试中将该位置用作classpath:dispatcher-servlet.xml

您的类路径上似乎有一些无效的类文件。

博客( http://blog.163.com/mxl_880310/blog/static/1847222162012320102631220/ )(繁体中文)描述了一个类似的问题,作者通过检查是否存在零大小的类文件来解决它。