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

Servlets/JSP Java Discussion :

Servlet et java.lang.NullPointerException


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Par défaut Servlet et java.lang.NullPointerException
    Bonjour à tous.

    J'ai actuellement un problème avec mon projet sous glassfish et j'ai besoin de votre aide .
    Je m'explique: Quand j'essaye de me connecter via un formulaire jsp, j'ai une erreur http 500 et l'erreur suivante qui apparaît dans le log de glassfish:

    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
     
    Avertissement: StandardWrapperValve[LoginServlet]: PWC1406: Servlet.service() for servlet LoginServlet threw exception
    java.lang.NullPointerException
    	at com.google.common.hash.MessageDigestHashFunction$MessageDigestHasher.putString(MessageDigestHashFunction.java:144)
    	at com.supinfo.supinbank.servlet.LoginServlet.doPost(LoginServlet.java:54)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
    	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
    	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
    	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
    	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
    	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
    	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
    	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
    	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    	at java.lang.Thread.run(Thread.java:722)
    Une ligne attire mon attention, celle de ma(mon ) servlet LoginServlet. Je décide donc de voir ce qui cloche mais tout m'a l'air d'être normal. Je regarde donc la ligne qui semble poser problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HashCode hc = hf.newHasher().putString(password).hash();
    Voici le code de LoginServlet (je précise que j'utilise une librairie nommée guava):



    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
     
    @WebServlet(name = "LoginServlet", urlPatterns = {"/login"})
    public class LoginServlet extends HttpServlet {
     
        @EJB
        private PersonDao personDao;
     
     
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            request.getRequestDispatcher("index.jsp").forward(request, response);
        }
     
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            final String email = request.getParameter("email");
            final String password = request.getParameter("password");
     
            HashFunction hf = Hashing.sha1();
            HashCode hc = hf.newHasher()
                    .putString(password)
                    .hash();
     
            final String hashedPassword = hc.toString();
     
     
            final Person p = personDao.findUserByMail(email);
            if (p == null) {
                doGet(request, response);
            }
            else
            {
                if (p.getPassword().equals(hashedPassword)) {
                    final HttpSession session = request.getSession();
                    session.setAttribute("user", String.format("%s %s", p.getFirstName(), p.getLastName()));
                    if (p.getRole() == UserRole.Advisor) {
                        session.setAttribute("role", "advisor");
                        response.sendRedirect(getServletContext().getContextPath() + "/auth/admin/advisor");
                    }
                    else
                    {
                        session.setAttribute("role", "customer");
                        session.setAttribute("customer", p);
                        response.sendRedirect(getServletContext().getContextPath() + "/auth/customer");
                    }
                }
                else
                {
                    doGet(request, response);
                }
            }
     
        }
     
        @Override
        public String getServletInfo() {
            return "Short description";
        }// </editor-fold>
    }
    Au cas où, je laisse le code la jsp que j'utilise pour ma connexion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    <body>
     
         <c:url value="/login" var="loginUrl" />
     
    <form method="POST" action="${loginUrl}" style="padding-top:10px; padding-bottom: -15px;">
                      <input type="email" name="email" placeholder="Email" required />
                      <input type="password" name=password" placeholder="Password" required />
                      <input type="submit" value="Login" class="btn-success" />
                  </form>
      </body>
    J'aimerais que vous m'éclairiez parce que je suis perdu.
    Merci d'avance à tous

  2. #2
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	at com.supinfo.supinbank.servlet.LoginServlet.doPost(LoginServlet.java:54)
    tu devrais voir ce qui est null dans cette classe LoginServlet dans la méthode doPost à la ligne 54

    En fait, tu devrais d'abord vérifier que les valeurs de tes variables email et password ne sont pas null avant d'appeler la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            HashCode hc = hf.newHasher()
                    .putString(password)
                    .hash();
    Cordialement,
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Par défaut
    Salut paissad,

    Merci pour ta réponse!

    Je vais faire la vérification de suite.

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Par défaut
    Quel boulet je fais !
    Dans mon formulaire, au lieu d'écrire name="password", j'ai fait name=password"!!
    En tout cas, merci à toi paissad pour m'avoir mis sur la voie!

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 104
    Par défaut
    Il s'agit bien de la génération de ton hash qui plante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    at com.google.common.hash.MessageDigestHashFunction$MessageDigestHasher.putString(MessageDigestHashFunction.java:144)
    Comme le dit paissad, ton champs password est peut-être null, et je pense savoir pourquoi :

    Dans ta jsp, je pense qu'il manque un guillemet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="password" name=password" placeholder="Password" required />
    Du coup ton getParameter ne trouve pas le paramètre "password".
    Et password est donc null.

    EDIT: je vois que tu as trouvé entre temps!

    Nuit blanche pour finir ce projet ?

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Par défaut
    Salut Doudoupe,

    Lol, effectivement, nuit blanche pour finir le projet. Mais chut, il ne faut pas le dire .

    Je ne veux pas abuser mais maintenant, j'ai un magnifique "javax.ejb.EJBException".. dans le magnifique log de glassfish.
    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
     
    ATTENTION: StandardWrapperValve[LoginServlet]: PWC1406: Servlet.service() for servlet LoginServlet threw exception
    javax.ejb.EJBException
    	at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5193)
    	at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5091)
    	at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4879)
    	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2039)
    	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1990)
    	at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:222)
    	at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
    	at $Proxy157.findUserByMail(Unknown Source)
    	at com.supinfo.supinbank.servlet.LoginServlet.doPost(LoginServlet.java:59)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
    	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
    	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
    	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
    	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
    	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
    	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
    	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
    	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    	at java.lang.Thread.run(Thread.java:662)
    Caused by: java.lang.AbstractMethodError: org.hibernate.ejb.EntityManagerImpl.getCriteriaBuilder()Ljavax/persistence/criteria/CriteriaBuilder;
    	at com.sun.enterprise.container.common.impl.EntityManagerWrapper.getCriteriaBuilder(EntityManagerWrapper.java:895)
    	at com.supinfo.supinbank.dao.jpa.JpaPersonDao.findUserByMail(JpaPersonDao.java:41)
    	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:597)
    	at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
    	at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
    	at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5366)
    	at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
    	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
    	at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
    	at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:46)
    	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:597)
    	at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
    	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
    	at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
    	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
    	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
    	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:597)
    	at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
    	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
    	at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)
    	at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5338)
    	at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5326)
    	at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)
    	... 30 more
    Je désespère .

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 104
    Par défaut
    Tu utilises Criteria pour faire tes requêtes sur ta BDD ? (c'est pas ma tasse de thé!)

    Regarde de ce côté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Caused by: java.lang.AbstractMethodError: org.hibernate.ejb.EntityManagerImpl.getCriteriaBuilder()Ljavax/persistence/criteria/CriteriaBuilder;
    	at com.sun.enterprise.container.common.impl.EntityManagerWrapper.getCriteriaBuilder(EntityManagerWrapper.java:895)
    	at com.supinfo.supinbank.dao.jpa.JpaPersonDao.findUserByMail(JpaPersonDao.java:41)
    Ta requête doit être mal formée et ne doit pas être acceptée par Criteria.
    Montre voir ton EJB JpaPersonDao ?

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

Discussions similaires

  1. [JSP / Servlet] setAttribut java.lang.nullpointerexception
    Par Invité dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 05/05/2015, 19h54
  2. servlet checkbox - error java.lang.NullPointerException
    Par bella1 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 13/02/2014, 11h55
  3. EJB3 Servlet java.lang.NullPointerException
    Par sebnolist dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 25/01/2011, 22h32
  4. java.lang.NullPointerException lors de l'exécution de la servlet
    Par fahmi.bedoui dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 07/01/2011, 12h09
  5. Servlet et java.lang.NullPointerException
    Par momjunior dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 07/05/2010, 20h58

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