IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

context:component-scan et UnsupportedClassVersionError


Sujet :

Spring Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut context:component-scan et UnsupportedClassVersionError
    Bonjour à tous.

    Je débute sur Spring et me forme grâce au livre "Spring par la pratique" 2ème édition.
    Je fait les exemples au fur et à mesure sur mon PC et là je tombe sur un cas bizarre. Il est dit dans le livre (p52 pour ceux qui ont le livre) que l'on peut configurer Spring pour qu'il détecte automatiquement les Beans grâce à l'annotation @Component (ou ses dérivé @Repository, @Service et @Controller) et l'utilisation de <context:component-scan base-package="mon.package"/> dans le fichier XML de configuration de Spring.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    @Repository("playerDAO")
    public class playerDAOImpl implements PlayerDAO{
        private static Session session;
     
        public List<PlayerEntity> getPlayerList(){
            List<PlayerEntity> players = null;
            session = HibernateUtil.getSession();
            Query query = session.getNamedQuery("player.list");
            players = query.list();
            return players;
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <?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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.0.xsd">
     
        <!--pour detecter les beans déclarés avec les annotations-->
        <context:component-scan base-package="qde" use-default-filters="true"/>
        (...)
     
    </beans>

    Mais lorsque je l'utilise j'obtiens l'erreur suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from file [E:\DEV\workspace\testHibernate\src\spring-config.xml]; nested exception is java.lang.UnsupportedClassVersionError: Bad version number in .class file
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:412)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
    	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
    	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
    	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
    	at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:126)
    	at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:92)
    	at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
    	at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:458)
    	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:388)
    	at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140)
    	at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:84)
    	at Main.main(Main.java:107)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:585)
    	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:115)
    Caused by: java.lang.UnsupportedClassVersionError: Bad version number in .class file
    	at java.lang.ClassLoader.defineClass1(Native Method)
    	at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
    	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    	at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    	at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    	at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.registerDefaultFilters(ClassPathScanningCandidateComponentProvider.java:177)
    	at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.<init>(ClassPathScanningCandidateComponentProvider.java:95)
    	at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.<init>(ClassPathBeanDefinitionScanner.java:101)
    	at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.createScanner(ComponentScanBeanDefinitionParser.java:128)
    	at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.configureScanner(ComponentScanBeanDefinitionParser.java:99)
    	at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:83)
    	at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73)
    	at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1335)
    	at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1325)
    	at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:136)
    	at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:93)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
    	... 19 more
    Je suis en Java 1.5.

    Lorsque je passe en Java 1.6, je n'ai plus d'erreur.
    J'ai peur d'avoir mal compris, mais le framework Spring est bien censé tourner sur une JVM 1.5 et plus (cf. le site de Spring).

    Ma question : Y'aurai-t-il quelque chose que j'ai manqué ?

    Merci.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    visiblement vous avez une ou plusieurs classes dans votre classpath compilée pour java6. Ce n'est pas nécessairement spring (sinon vous n'arriveriez meme pas à charger l'exception) ni votre application (sinon vous n'arriveriez pas à démarrer). Regardez du coté de vos dépendances.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    Bonsoir et merci de votre réponse rapide.

    Je ne pense pas (à priori) que ce soit une de mes classes. Je me forme à Spring et ai construit mon application from scratch et avec le minimum de chose (Postgres en BDD, Hibernate 3, Spring 3 et quelques classes JAVA que je viens de recompilé en 1.5 on sait jamais) jusqu'a maintenant (c'est à dire la page 52 du livre) tout fonctionnait correctement. (et quand je dis tout, c'est vraiment pas grand chose)

    Pour ce nouvel exemple du livre "Détections automatique de composants" j'ai remplacé dans le fichier XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           ">
         <bean id="playerDAO" class="qde.basket.dao.impl.playerDAOImpl"/>
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.0.xsd">
     
        <!--pour detecter les beans déclarés avec les annotations-->
        <context:component-scan base-package="qde" use-default-filters="true"/>
    et mon code java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class playerDAOImpl implements PlayerDAO{
        private static Session session;
     
        public List<PlayerEntity> getPlayerList(){
            List<PlayerEntity> players = null;
            session = HibernateUtil.getSession();
            Query query = session.getNamedQuery("player.list");
            players = query.list();
            return players;
        }
    }
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    @Repository("playerDAO")
    public class playerDAOImpl implements PlayerDAO{
        private static Session session;
     
        public List<PlayerEntity> getPlayerList(){
            List<PlayerEntity> players = null;
            session = HibernateUtil.getSession();
            Query query = session.getNamedQuery("player.list");
            players = query.list();
            return players;
        }
    }
    et c'est à partir de ce moment que cela ne fonctionne plus

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    parce que c'est à partir de ce moment que la classe a été chargée
    vu le stack trace, ça a a voir avec les filter. Quels jars avez vous dans votre projet? Vérifiez que chacun d'eux est bien prévu pour java5

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    les librairy que j'utilise

    log4j-1.2.16.jar
    postgresql-9.0-801.jdbc3.jar -- version pour une JVM 1.5

    -- hibernate 3
    hibernate3\antlr.jar
    hibernate3\asm.jar
    hibernate3\cglib.jar
    hibernate3\commons-collections.jar
    hibernate3\commons-logging.jar
    hibernate3\dom4j.jar
    hibernate3\hibernate-annotations.jar
    hibernate3\hibernate.jar
    hibernate3\javassist.jar
    hibernate3\jta.jar
    hibernate3\slf4j-api.jar

    -- Spring 3.0.0
    spring-3.0.0\aopalliance.jar
    spring-3.0.0\commons-logging.jar
    spring-3.0.0\spring-aop.jar
    spring-3.0.0\spring-asm.jar
    spring-3.0.0\spring-aspects.jar
    spring-3.0.0\spring-beans.jar
    spring-3.0.0\spring-context.jar
    spring-3.0.0\spring-core.jar
    spring-3.0.0\spring-expression.jar
    spring-3.0.0\spring-instrument.jar
    spring-3.0.0\spring-jdbc.jar
    spring-3.0.0\spring-jms.jar
    spring-3.0.0\spring-orm.jar
    spring-3.0.0\spring-oxm.jar
    spring-3.0.0\spring-tx.jar
    spring-3.0.0\spring-web.jar
    spring-3.0.0\spring-webmvc.jar

    -- JPA 2.0
    javax.annotation.jar
    javax.ejb.jar
    javax.jms.jar
    javax.persistence.jar
    javax.resource.jar
    javax.servlet.jar
    javax.servlet.jsp.jar
    javax.servlet.jsp.jstl.jar
    javax.transaction.jar

    mais si la classe qui foire est chargée lorsque j'utilise la configuration <context:component-scan.../> c'est sans doute qu'il s'agit d'une librairie lié à Spring, non ? et on en revient à ma question du départ.

    PS: faut être patient avec moi, je comprend vite mais faut m'expliquer longtemps.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    jpa 2.0 est batit sur java EE 6, donc java 6. A priori donc ces classes déjà ne sont pas supposées etre utilisées avec java 5.

    Oui, c'est spring qui déclenche l'exception, mais probablement en chargent une classe durant le scanning qui n'a rien à voir avec spring (et oui, il faut les charger pour savoir si c'est une classe annotée)

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    Ok, merci pour l'info et l'aide apporté.
    Je comprend mieux.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/03/2015, 09h44
  2. Fonctionnement du component-scan
    Par Thibault.B dans le forum Spring
    Réponses: 1
    Dernier message: 08/07/2009, 12h31
  3. Réponses: 6
    Dernier message: 22/02/2009, 10h41
  4. Réponses: 18
    Dernier message: 06/04/2008, 20h57
  5. [système] Comment ajouter un item dans le context menu de Windows ?
    Par ddmicrolog dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 29/06/2005, 17h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo