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

Struts 2 Java Discussion :

[Struts2] Erreur dans ma classe UserAction : java.lang.NullPointerException


Sujet :

Struts 2 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2012
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 165
    Par défaut [Struts2] Erreur dans ma classe UserAction : java.lang.NullPointerException
    Bonjour,

    Je suis débutant en Struts2 et je travaille sur une application qui intègre Hibernate et Struts2.

    J'ai suivi ce tutoriel : http://www.mkyong.com/struts2/struts...ation-example/

    Voilà mes fichiers de configuation (web.xml, struts.xml), la classe UserAction et ma page user.jsp ci - dessous:

    web.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
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>Struts2HibernateExample</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
     
      <filter>
    	<filter-name>struts2</filter-name>
    	<filter-class>
    	  org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    	</filter-class>
      </filter>
     
      <filter-mapping>
    	<filter-name>struts2</filter-name>
    	<url-pattern>/*</url-pattern>
      </filter-mapping>
     
      <listener>
        <listener-class>
    	  com.afkir.listener.HibernateListener
        </listener-class>
      </listener>
      
    </web-app>
    Struts.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
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
     
    <struts>
      <constant name="struts.devMode" value="true" />
     
      <package name="default" namespace="/" extends="struts-default">
     
        <action name="listUserAction" 
    	class="com.afkir.action.UserAction" method="listUser" >
            <result name="success">pages/user.jsp</result>
        </action>		
     
      </package>	
    </struts>
    user.jsp :

    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
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
    </head>
     
    <body>
    <h1>Struts 2 + Hibernate integration example</h1>
     
    <h2>All Customers</h2>
     
    <s:if test="userList.size() > 0">
    <table border="1px" cellpadding="8px">
    	<tr>
    		<th>Customer Id</th>
    		<th>Name</th>
    		<th>Created Date</th>
    	</tr>
    	<s:iterator value="userList" status="userStatus">
    		<tr>
    			<td><s:property value="id" /></td>
    			<td><s:property value="name" /></td>
    		</tr>
    	</s:iterator>
    </table>
    </s:if>
    <br/>
    <br/>
     
    </body>
    </html>
    UserAction.java :

    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
    package com.afkir.action;
     
    import java.util.ArrayList;
    import java.util.List;
     
    import org.apache.struts2.ServletActionContext;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
     
    import com.afkir.listener.HibernateListener;
    import com.afkir.model.User;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
     
    public class UserAction extends ActionSupport implements ModelDriven {
     
    	User user = new User();
    	List<User> userList = new ArrayList<User>();
     
    	public String execute() throws Exception {
    		return SUCCESS;
    	}
     
    	public Object getModel() {
    		return user;
    	}
     
    	public List<User> getUserList() {
    		return userList;
    	}
     
    	public void setUserList(List<User> userList) {
    		this.userList = userList;
    	}
     
    	//save customer
    	public String addUser() throws Exception{
     
    		//get hibernate session from the servlet context
    		SessionFactory sessionFactory = 
    	         (SessionFactory) ServletActionContext.getServletContext()
                         .getAttribute(HibernateListener.KEY_NAME);
     
    		Session session = sessionFactory.openSession();
     
    		session.beginTransaction();
    		session.save(user);
    		session.getTransaction().commit();
     
    		//reload the customer list
    		userList = null;
    		userList = session.createQuery("from User").list();
     
    		return SUCCESS;
     
    	}
     
    	//list all customers
    	public String listUser() throws Exception{
     
    		//get hibernate session from the servlet context
    		SessionFactory sessionFactory = 
    	         (SessionFactory) ServletActionContext.getServletContext()
                         .getAttribute(HibernateListener.KEY_NAME);
     
    		Session session = sessionFactory.openSession();
     
    		userList = session.createQuery("from User").list();
     
    		return SUCCESS;
     
    	}	
     
    }
    Voilà les erreurs que j'ai quand j'accède à ce lien :
    http://localhost:8082/Struts2Hiberna...rAction.action

    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
    java.lang.NullPointerException 
        com.afkir.action.UserAction.listUser(UserAction.java:66)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        java.lang.reflect.Method.invoke(Unknown Source)
        com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:453)
        com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:292)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:255)
        org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
        org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:90)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:192)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
        org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:510)
        org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
        org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
        org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
        org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
        org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        java.lang.Thread.run(Unknown Source)

    Il me parait que le problème vient de la méthode listUser() de la classe UserAction.

    J'ai besoin de votre renseignements,
    Merci d'avance.

  2. #2
    Membre chevronné
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Par défaut
    Bonsoir,
    c'est le ServletActionContext.getServletContext().getAttribute(...) qui retourne NULL, et donc le SessionFactory Hibernate qui n'a pas été instancié.

    Peux-tu nous montrer le fichier de conf Hibernate, et le listener Hibernate déclaré dans web.xml ?

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2012
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 165
    Par défaut
    Mon fichier hibernate.cfg.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
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
      <session-factory>
        <property name="hibernate.bytecode.use_reflection_optimizer">false</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost/bdd_test</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <property name="use_sql_comments">false</property>
        <mapping resource="com/afkir/hibernate/User.hbm.xml" />
      </session-factory>
    </hibernate-configuration>
    Ma classe HibernateListener :

    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
    public class HibernateListener implements ServletContextListener{
     
        private Configuration config;
        private SessionFactory factory;
        private String path = "/hibernate.cfg.xml";
        private static Class clazz = HibernateListener.class;
     
        public static final String KEY_NAME = clazz.getName();
     
    	public void contextDestroyed(ServletContextEvent event) {
    	  //
    	}
     
    	public void contextInitialized(ServletContextEvent event) {
     
    	 try { 
    	        URL url = HibernateListener.class.getResource(path);
    	        config = new Configuration().configure(url);
    	        factory = config.buildSessionFactory();
     
    	        //save the Hibernate session factory into serlvet context
    	        event.getServletContext().setAttribute(KEY_NAME, factory);
    	  } catch (Exception e) {
    	         System.out.println(e.getMessage());
    	   }
    	}
    }

  4. #4
    Membre chevronné
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Par défaut
    La config Hibernate a l'air correcte, et le listener l'est également.

    Par contre, l'impossibilité d'instancier le SessionFactory peut provenir de Librairies non définies en tant que Web Libraries (copiées dans WEB-INF/Lib) et ajoutées directement dans le buildPath (comme sur le screen fourni où j'ai signalé une lib mal déclarée en rouge).

    Toutes les lib (*.jar) sont-elles sans exception dans WEB-INF/Lib ?
    N'y a t-il aucune erreur signalée au démarrage du contexte ?
    Images attachées Images attachées  

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2012
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 165
    Par défaut
    Bonjour,

    Je vous remercie infiniment pour l'interet que vous donnez à mon problème.

    Voilà une photo qui illustre les libs des jar que j'ai :

    Images attachées Images attachées  

  6. #6
    Membre chevronné
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Par défaut
    Bonjour,
    je viens de voir :
    il manque la classe du driver jdbc dans hibernate.cfg.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <hibernate-configuration>
      <session-factory>
      ...
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
      ...
      </session-factory>
    <hibernate-configuration>

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

Discussions similaires

  1. Erreur "Exception in thread "main" java.lang.NullPointerException"
    Par bibouta88 dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 26/03/2013, 19h38
  2. Réponses: 0
    Dernier message: 31/08/2012, 19h55
  3. Erreur "java.lang.NullPointerException" dans un ArrayList
    Par AmeniESC dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 21/03/2012, 00h12
  4. erreur dans mon code "java.lang.NullPointerException"
    Par wiss20000 dans le forum Langage
    Réponses: 12
    Dernier message: 19/04/2007, 09h08
  5. [Thread] Erreur dans une classe interne
    Par totof2308 dans le forum Général Java
    Réponses: 5
    Dernier message: 03/06/2004, 08h15

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