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 :

Spring @autowired et NullPointerException


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 88
    Par défaut Spring @autowired et NullPointerException
    Bonjour à tous,

    Je développe une application avec spring, hibernate et Vaadin.
    j'ai un problème avec l'injection de dao dans mes classes d'interface graphique.
    Dans certaines classes l'injection se fait avec réussite tandis que dans d'autres classes la référence dao retourne null ce qui provoque une NullPointerException.

    J'ai beau cherché sur internet et les forum sans trouver aucune solution .

    Voici le fichier de configuration beans.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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    <context:spring-configured />
    
    <context:component-scan base-package="com.businessdecision.tact.bdtechtest.dao" />
    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
    <bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />
    
        <bean id="dataSource" class="org.springframework.jdbc.datasource.SingleConnectionDataSource">
    		<property name="driverClassName">
    			<value>com.mysql.jdbc.Driver</value>
    		</property>
    		<property name="url">
    			<value>jdbc:mysql://localhost:3306/gestionnairedb</value>
    		</property>
    		<property name="username">
    			<value>root</value>
    		</property>
    		<property name="password">
    			<value></value>
    		</property>
    		<property name="suppressClose">
    			<value>true</value>
    		</property>
    	</bean>
    
    <bean id="txDataSource"
    		class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
    		<constructor-arg ref="dataSource" />
    	</bean>
    
    	<!-- Hibernate SessionFactory Definition -->
    	<bean id="sessionFactory"
    		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    		<property name="hibernateProperties">
    			<props>
    				<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
    				<prop key="hibernate.show_sql">true</prop>
    				<prop key="hibernate.hbm2ddl.auto">update</prop>
    			</props>
    		</property>
    		<property name="dataSource">
    			<ref bean="txDataSource" />
    		</property>
    		<property name="packagesToScan">
    			<list>
    			<value>com.businessdecision.tact.bdtechtest.domain</value>	
    			</list>
    		</property>
    	</bean>
    	<!-- Using HibernateTemplate, and shared by all DAO object because it is 
    		thread-safe -->
    	<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
    		<property name="sessionFactory" ref="sessionFactory" />
    		<property name="fetchSize" value="20" />
    		<property name="allowCreate" value="true" />
    		<property name="alwaysUseNewSession" value="false" />
    	</bean>
    
    
    <!-- Hibernate Transaction Manager Definition -->
    	<bean id="transactionManager"
    		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    		<property name="sessionFactory" ref="sessionFactory" />
    	</bean>
    	
    	<tx:annotation-driven transaction-manager="transactionManager"
    		proxy-target-class="true" />
    		
    			<!-- le gestionnaire de BLOB / CLOB de chez Spring -->
    	<bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" />
    
    Voici un exemple d'exception que je reçois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FormGestionProfil.java >> utilisateurDao: null
    java.lang.NullPointerException
    	at com.businessdecision.tact.bdtechtest.ui.FormGestionProfil.buttonClick(FormGestionProfil.java:95)
    La ligne générant l'exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(utilisateurDao.confirmPWD(npwd, user)){
    et la classe générant l'exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @Configurable(preConstruction=true)
    public class FormGestionProfil extends Form implements ClickListener {
     
     
    	private static final long serialVersionUID = 463035994709151133L;
     
    	@Autowired 
    	UtilisateurDao utilisateurDao;
    merci d'avance pour votre aide.

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 31
    Par défaut
    Il faut que ton projet soit compilé avec le AJC (compilateur d'AspectJ)

    Si c'est un projet Maven, tu peux ajouter ça

    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
     
    ...
    			<plugin>
    				<groupId>org.codehaus.mojo</groupId>
    				<artifactId>aspectj-maven-plugin</artifactId>
    				<version>1.3</version>
    				<executions>
    					<execution>
    						<id>compile</id>
    						<configuration>
    							<source>1.6</source>
    							<target>1.6</target>
    							<encoding>${project.build.sourceEncoding}</encoding>
    							<verbose>false</verbose>
    							<outxml>true</outxml>
    							<aspectLibraries>
    								<aspectLibrary>
    									<groupId>org.springframework</groupId>
    									<artifactId>spring-aspects</artifactId>
    								</aspectLibrary>
    							</aspectLibraries>
    							<weaveDependencies>
    								<weaveDependency>
    									<groupId>org.springframework</groupId>
    									<artifactId>spring-aspects</artifactId>
    								</weaveDependency>
    							</weaveDependencies>
    						</configuration>
    						<goals>
    							<goal>compile</goal>
    						</goals>
    					</execution>
    					<execution>
    						<id>test-compile</id>
    						<configuration>
    							<source>1.6</source>
    							<target>1.6</target>
    							<encoding>${project.build.sourceEncoding}</encoding>
    							<verbose>false</verbose>
    							<aspectLibraries>
    								<aspectLibrary>
    									<groupId>org.springframework</groupId>
    									<artifactId>spring-aspects</artifactId>
    								</aspectLibrary>
    							</aspectLibraries>
    							<weaveDependencies>
    								<weaveDependency>
    									<groupId>org.springframework</groupId>
    									<artifactId>spring-aspects</artifactId>
    								</weaveDependency>
    							</weaveDependencies>
    						</configuration>
    						<goals>
    							<goal>test-compile</goal>
    						</goals>
    					</execution>
    				</executions>
    			</plugin>
    ...

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 88
    Par défaut
    Bonjour net merci pour votre réponse,

    Le compilateur AJC est déjà présent dans le pom.xml , l'application fonctionne et je peut accèder à l'interface de login et quelques autre interfaces de gestion, seules 2 ou 3 interfaces qui ne sont pas accessibles à cause de l'erreur NullPointerException générée par l'appel au DAO qui doit être injecté par spring.

    Il y'a quelques modifications que je dois apporter au projet pour ajouter une couche Service, peut être que ça résoudra le problème . Je vous tient au courant si je résout le problème .

    Si vous avez quelques conseils ou explications à propos de l'implémentation de la couche service merci de m'en faire part .

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 88
    Par défaut
    même problème avec le service

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 88
    Par défaut
    En insérant un System.out.println dans le constructeur du bean, j'ai constaté qu'il est instancié mais il n'est pas injecté, pourtant j'ai mis @Autowired au dessus de la variable . Pourquoi ?

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 31
    Par défaut
    Il te manque peut-être ça dans ta config Spring :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <context:annotation-config/>

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

Discussions similaires

  1. [Framework] Maven+Spring : pb avec @Autowired
    Par zev dans le forum Spring
    Réponses: 2
    Dernier message: 02/10/2009, 21h43
  2. [Framework] Injection spring par autowired en cascade
    Par _Moa_ dans le forum Spring
    Réponses: 1
    Dernier message: 11/08/2009, 16h31
  3. [Framework] Spring et autowiring
    Par PomCompot dans le forum Spring
    Réponses: 5
    Dernier message: 20/07/2009, 14h58
  4. [Integration] Spring et Jmock : injecter un mock dans un @autowired
    Par elix63 dans le forum Spring
    Réponses: 1
    Dernier message: 08/07/2009, 08h54
  5. NullPointerException en spring.
    Par balteo dans le forum Spring
    Réponses: 12
    Dernier message: 27/02/2009, 11h58

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