Échec du chargement de l'ApplicationContext causée par ArrayIndexOutOfBoundsException dans ClassReader
Quand je suis en cours d'exécution de la classe de test junit ci-dessous exception survient? Comment puis-je résoudre ce problème?
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.<init>(Unknown Source)
at org.springframework.asm.ClassReader.<init>(Unknown Source)
at org.springframework.asm.ClassReader.<init>(Unknown Source)
at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(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)
ma classe de test est
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:dispatcher-servlet.xml")
public class CandidateDAOImplTest{
@Autowired
public CandidateDAO candidateService;
@Test
public void testGetCandidate() {...}
}
dispatcher-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"
>
<context:component-scan base-package="com.global" />
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>mymessages</value>
</list>
</property>
</bean>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>database.properties</value>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- Configures the @Controller programming model -->
<mvc:annotation-driven />
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
<bean id="candidateService" class="com.global.dao.impl.CandidateDAOImpl">
<property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>
<!-- Define a Transaction Manager -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
<!-- Turn on support for transaction annotations -->
<tx:annotation-driven transaction-manager="txManager"/>
</beans>
sa situé au web/WEB-INF/dispatcher-servlet.xml.
Je suis à l'aide de netbeams ied 7.3 et glassfish server 3.0
C'est déprimant, combien de "réponses" à cette question indiquent que le répondeur ne peut pas lire une trace de la pile.
J'ai rencontré un problème similaire et il fixe par la suppression de "<context:component-scan de la base-package="com.mondial" />", puisque nous n'avons pas vraiment besoin de ce qui a fonctionné pour nous. Encore n'ai aucune idée de pourquoi il serait la cause d'un problème.
J'ai rencontré un problème similaire et il fixe par la suppression de "<context:component-scan de la base-package="com.mondial" />", puisque nous n'avons pas vraiment besoin de ce qui a fonctionné pour nous. Encore n'ai aucune idée de pourquoi il serait la cause d'un problème.
OriginalL'auteur deepak kumar | 2013-07-10
Vous devez vous connecter pour publier un commentaire.
Vous avez probablement lambda expression à l'intérieur d'un de vos beans spring. Apparemment, le printemps 3 haricots ne peut pas initialiser si il y a un lambda quelque part dans leur code. Dans le cas de la migration de printemps 4 n'est pas une option, essayez de réécrire vos expressions lambda à l'aide de classes anonymes, comme
ou déplacer lambda code de printemps bean. J'ai eu le même problème et il m'a aidé, je pourrais toujours utiliser le printemps 3 avec le jre/jdk 8.
Évite de cet échec:
OriginalL'auteur andrii
Vous n'avez pas indiqué quel JDK que vous utilisez. Si vous utilisez 1.8 alors vous pourriez trouver que vous aurez besoin de mettre à niveau le Printemps à 4 (ou 3.2.9+ comme yurez l'a souligné).
Voir la réponse à cette question:
Java 1.8 ASM ClassReader échoué à analyser un fichier de classe - probablement en raison d'un nouveau fichier de classe Java version qui n'est pas encore pris en charge
Par réponse à la question, la mise à jour de Printemps 3.2.9+ fonctionne aussi.
OriginalL'auteur vegemite4me
Le problème est l'emplacement de votre fichier xml. WEB-INF n'est pas une partie du classpath. Essayez de le copier sous le "src" le dossier.
OriginalL'auteur DiTap
Essayer de mettre le fichier dans le dossier src. Il sera alors copié dans le dossier WEB-INF/classes dossier. Alors vous pouvez vous référer à elle comme classpath:dispatcher-servlet.xml.
Si le fichier n'est pas directement sous la classes répertoire, alors vous ne pouvez pas utiliser l'emplacement que classpath:dispatcher-servlet.xml dans votre test
OriginalL'auteur Atul
Il semble y avoir une classe non valide fichier sur votre classpath.
Un blog(http://blog.163.com/mxl_880310/blog/static/1847222162012320102631220/) (en Chinois Traditionnel) décrit un problème similaire, l'auteur de la résoudre en vérifiant si il y a un zéro de la taille de fichier de classe.
OriginalL'auteur Yugang Zhou