无法在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/ )(繁体中文)描述了一个类似的问题,作者通过检查是否存在零大小的类文件来解决它。