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 :

Erreur d'injection @Autowired [Framework]


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de bruneltouopi
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 308
    Par défaut Erreur d'injection @Autowired
    Bonjour je débutes avec Spring.
    Après configuration j'ai cette erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'paysServices': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: better.dao.PaysDao better.services.PaysServices.paysDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [better.dao.PaysDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    Le code de ma Dao
    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
    @Repository
    @Transactional(readOnly=true)
    public class PaysDao extends AbstractJpaDAO<Pays> implements IPays{
     
     
    	private static final long serialVersionUID = 1L;
     
         @PersistenceContext
        private EntityManager em;
     
     
     
        @Override
        protected EntityManager getEntityManager() {
            return em;
        }
        @Override
        protected Class<Pays> getEntityClass() {
            return Pays.class;
        }
     
     
        @Override
    	public Collection<Pays> getAllPays(){
            return super.findAll();
        }
     
        @Override
    	public Pays getPaysByCode(String code){
            Map<String,Object> params=new HashMap<>();
            params.put("code", code);
            return super.findEntityByUsingQueryName(Pays.FIND_BY_CODE, params);
        }
     
    }
    Voici mon code de Service
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    @Service(value = "paysServices")
    public class PaysServices implements GenericService<Pays> {
     
        @Autowired
        private PaysDao paysDao;
     
    //setter
    }
    Voici mon Controller

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @ManagedBean(name = "payscontroller")
    @ViewScoped
    public class PaysController implements Serializable {
        @Autowired
        private PaysServices paysServices;
    }

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Par défaut
    peux-tu essayer


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @Service(value = "paysServices")
    public class PaysServices implements GenericService<Pays> {
     
        @Inject
        private PaysDao paysDao;
     
    //setter
    }

  3. #3
    Membre très actif Avatar de bruneltouopi
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 308
    Par défaut
    Citation Envoyé par plawyx Voir le message
    peux-tu essayer


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @Service(value = "paysServices")
    public class PaysServices implements GenericService<Pays> {
     
        @Inject
        private PaysDao paysDao;
     
    //setter
    }
    Non je ne peux pas car il me faudra configurer pour devoir activer le CDI.
    Ce que je ferai plutard pour le moment je veux commencer à utiliser uniquement les annotations Spring

  4. #4
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    tu as probablement 2 classes PaysDao :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    better.dao.PaysDao et better.services.PaysServices.paysDao
    essaies de leur donner un qualifier different ou un required = false.

    eric

  5. #5
    Membre très actif Avatar de bruneltouopi
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 308
    Par défaut
    Citation Envoyé par jeffray03 Voir le message
    tu as probablement 2 classes PaysDao :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    better.dao.PaysDao et better.services.PaysServices.paysDao
    essaies de leur donner un qualifier different ou un required = false.

    eric
    Non je n'ai pas deux classes PaysDao.En effet better.dao.PaysDao est la dao existant et better.services.PaysServices.paysDao est normalement ce qui est injecté dans PaysServices;

    Dans ce cas là, utilise @Qualifier avec en argument une propriété déjà existante de ton SpringBean ou alors créé ta propre annotation @Qualifier.
    C'est vrai que cette solution me parait désagréable car je sais évidemment que je n'ai pas deux classes de type PaysDao.Et si je le qualifies j'ose espérer que je ne vais pas qualifier toutes mes Dao de la sorte

  6. #6
    Membre très actif Avatar de bruneltouopi
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 308
    Par défaut
    j'ai crée le Qualifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @Target({ElementType.FIELD, ElementType.PARAMETER})
    @Retention(RetentionPolicy.RUNTIME)
    @Qualifier
    public @interface PaysQualifier {
     
    }
    j'a utilisé ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class PaysServices implements GenericService<Pays> {
     
        @Autowired(required = false)
        @PaysQualifier()
        private PaysDao paysDao;
    }
    Dès à présent mon projet se lance mais lors de l'insertion avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     paysServices.create(pays);
    voici le code du controler
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    @ManagedBean(name = "payscontroller")
    @ViewScoped
    public class PaysController implements Serializable {
    	Logger logger= LoggerFactory.getLogger(PaysController.class);
    private List<Pays> filteredPays;
     
        @Autowired
        private PaysServices paysServices;
        private Pays pays;
     
        private Collection<Pays> listPays;
     
        public PaysController() {
            pays = new Pays();
        }
        //initialiser le pays
     
        public void init() {
            pays = new Pays();
        }
         public void reset(){
            this.init();
            RequestContext.getCurrentInstance().reset(":form1");
        }
     
        //permet d'eviter l'expiration illegal d'une session
        @PostConstruct
        void initialiseSession() {
            FacesContext.getCurrentInstance().getExternalContext().getSession(true);
        }
     
        //ajouter un pays
        public String addPays() {
            FacesContext ctx = FacesContext.getCurrentInstance();
     
            //get default locale
            Locale myLoc = ctx.getViewRoot().getLocale();
            //Locale myLoc =new Locale("fr");
            String entete[] = {LocaleHelper.getLocaleString(RecupBundle.FichierBundle, "entite.pays", null, myLoc)};
            try {
                   paysServices.create(pays);
     
            } catch (ConstraintViolationException E) {
                   throw E;
            } catch (Throwable th) {
                     logger.error("erreur survenu",th);
            }
     
            return null;
        }
     
        //retour vers la liste des pays
        public Pays getDetails() {
            return pays;
        }
     
        public String showDetails() {
            return null;
        }
        //
     
        public Pays getPays() {
            return pays;
        }
     
        public void setPays(Pays pays) {
            this.pays = pays;
        }
     
        public void setPaysServices(PaysServices paysServices) {
            this.paysServices = paysServices;
        }
     
        public Collection<Pays> getListPays() {
            return paysServices.findAll();
        }
     
     
    }
    StrackTrace de l'erreur
    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
     
    15:29:17.227 [http-bio-8080-exec-69] ERROR better.controllers.PaysController - erreur survenu
    java.lang.NullPointerException: null
    	at better.controllers.PaysController.addPays(PaysController.java:69) ~[PaysController.class:na]
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_21]
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_21]
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_21]
    	at java.lang.reflect.Method.invoke(Method.java:601) ~[na:1.7.0_21]
    	at org.apache.el.parser.AstValue.invoke(AstValue.java:264) [jasper-el.jar:7.0.27]
    	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) [jasper-el.jar:7.0.27]
    	at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:153) [jsf-api-2.1.6.jar:2.1.6-SNAPSHOT]
    	at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) [jsf-api-2.1.6.jar:2.1.6-SNAPSHOT]
    	at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769) [jsf-api-2.1.6.jar:2.1.6-SNAPSHOT]
    	at javax.faces.component.UICommand.broadcast(UICommand.java:300) [jsf-api-2.1.6.jar:2.1.6-SNAPSHOT]
    	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) [jsf-api-2.1.6.jar:2.1.6-SNAPSHOT]
    	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) [jsf-api-2.1.6.jar:2.1.6-SNAPSHOT]
    	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) [jsf-impl-2.1.6.jar:2.1.6-SNAPSHOT]
    	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.6.jar:2.1.6-SNAPSHOT]
    	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.6.jar:2.1.6-SNAPSHOT]
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jsf-api-2.1.6.jar:2.1.6-SNAPSHOT]
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) [catalina.jar:7.0.27]
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [catalina.jar:7.0.27]
    	at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:98) [primefaces-4.0.jar:4.0]
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) [catalina.jar:7.0.27]
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [catalina.jar:7.0.27]
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) [catalina.jar:7.0.27]
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) [catalina.jar:7.0.27]
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) [catalina.jar:7.0.27]
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) [catalina.jar:7.0.27]
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) [catalina.jar:7.0.27]
    	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) [catalina.jar:7.0.27]
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) [catalina.jar:7.0.27]
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) [catalina.jar:7.0.27]
    	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999) [tomcat-coyote.jar:7.0.27]
    	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565) [tomcat-coyote.jar:7.0.27]
    	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307) [tomcat-coyote.jar:7.0.27]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_21]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_21]
    	at java.lang.Thread.run(Thread.java:722) [na:1.7.0_21]

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Par défaut
    Citation Envoyé par bruneltouopi Voir le message
    Non je ne peux pas car il me faudra configurer pour devoir activer le CDI.
    Ce que je ferai plutard pour le moment je veux commencer à utiliser uniquement les annotations Spring
    Dans ce cas là, utilise @Qualifier avec en argument une propriété déjà existante de ton SpringBean ou alors créé ta propre annotation @Qualifier.

  8. #8
    Membre très actif Avatar de bruneltouopi
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 308
    Par défaut
    Mes fichiers de configuration
    Root-context.xml
    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" standalone="no"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:tx="http://www.springframework.org/schema/tx"
    	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-3.2.xsd
    		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
    		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">
     
    	<!-- Root Context: defines shared resources visible to all other web components -->
    	<context:annotation-config />
    	<context:component-scan base-package="better.dao,better.controllers,better.services" />
    	<import resource="db.xml" />
     
    </beans>
    Et db.xml
    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
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:tx="http://www.springframework.org/schema/tx"
    	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-3.2.xsd
    		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
    		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">
     
    	<!-- Scans within the base package of the application for @Components to configure as beans -->
    	<bean id="placeholderConfig"
    		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    		<property name="location" value="classpath:db.properties" />
    	</bean>
     
    	<bean id="entityManagerFactory" 
    		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    		<property name="dataSource" ref="dataSource" />
    		<property name="packagesToScan" value="better.modele" />
    		<property name="jpaVendorAdapter">
    			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
     
    		</property>
    		 <property name="jpaProperties">
             <props>
                <prop key="hibernate.hbm2ddl.auto">create-drop</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
             </props>
          </property>		
    	</bean>
     
    	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    		<property name="driverClassName" value="${db.driver}" />
    		<property name="url" value="${db.url}" />
    		<property name="username" value="${db.username}" />
    		<property name="password" value="${db.password}" />
    	</bean>
     
    	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
            <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    	</bean>
     
    	<tx:annotation-driven />
     
    	<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
     
    </beans>

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

Discussions similaires

  1. Erreur d'injection de l'EJB dans le Managed Bean
    Par bruneltouopi dans le forum Java EE
    Réponses: 18
    Dernier message: 04/01/2014, 16h44
  2. Erreur "Injection of autowired dependencies failed"
    Par achref05 dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 1
    Dernier message: 27/10/2011, 12h02
  3. [Security] Spring security injection autowired error
    Par chesko dans le forum Spring
    Réponses: 2
    Dernier message: 12/07/2010, 10h09
  4. [Security] Spring security injection autowired error
    Par ekremyilmaz dans le forum Spring
    Réponses: 1
    Dernier message: 24/06/2010, 15h14
  5. Erreur injection avec GlassFish
    Par pruderic dans le forum Glassfish et Payara
    Réponses: 1
    Dernier message: 28/08/2008, 00h09

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