NullPointerException valide??? [Résolu]

Byron - 5 juil. 2016 à 18:09 - Dernière réponse :  Byron
- 6 juil. 2016 à 16:51
Bonjour,

Soit je suis à côté de mes pompes, ou alors ce n'est pas évident pour moi.
Quoi qu'il en soit pourriez-vous m'indiquer pour quelle raison ma dernière condition if ( avec le submit ) est valide ( vu que mon log m'affiche mon okidokido ) si je me prends une belle nullpointerException ??? je précise que la ligne 149 correspond à la ligne du if avec le submit.

Surtout qu'avec firebug, je vois aussi mon paramètre submit valant addPatient.

Je vous remercie d'avance pour vos lumières ^^



juil. 05, 2016 6:01:55 PM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: "Servlet.service()" pour la servlet be.gestisoins.controllers.PatientManagement a généré une exception
java.lang.NullPointerException
at be.gestisoins.controllers.PatientManagement.doPost(PatientManagement.java:149)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

2016-07-05 18:01:57:822 INFO be.gestisoins.controllers.PatientManagement: okidokido!




Mon bouton submit JSTL
<c:if test="${requestScope.content=='addPatient'}">
 <button class="btn btn-info center-block" type="submit" name="submit" id="addPatient" value="addPatient">Ajouter</button>
</c:if>



Mon bout de code de servlet ( le log est un log4j )

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
 {
  //**************************************************//
  //  Récupération de data pour le select2              //
  //**************************************************//
  
  if ( request.getParameterMap().containsKey("info") &&
    request.getParameter("info").equals("cityLookup") &&
    request.getParameterMap().containsKey("cityLookup") &&
    request.getParameter("cityLookup").matches("[\\w]{2,100}")
   )
  { 
   // Test si le champ est valide
   if(request.getParameter("cityLookup").matches("[\\w]{2,100}"))
   {
    
    
    city = request.getParameter("cityLookup");    
    EntityFinder<Location> ef = new EntityFinderImpl<>();
    List<Location> loc;
    Map<String, Object> map = new HashMap<>();
    map.put("city", city);
   
    // Requête afin de trouver les records
    loc = ef.findByNamedQuery("Location.findWithWildCard", new Location(), map);
    log.info("Recherche de la localité");
    
    // Garnissage d'un tableau JSON avec des JSONObjects
    JSONObject json = new JSONObject();
    JSONArray location = new JSONArray();
    JSONObject obj;
    
    try 
    {
     for(Location l : loc)
     {
      obj = new JSONObject();
      
      obj.put("id", l.getIdLocation());
      obj.put("city", l.getCity());
      obj.put("zipCode", l.getZipCode());
      location.put(obj);
     }
     json.put("location", location);
    }
    catch (JSONException e) 
    {
     log.debug(e);
    }
        
    // Set du type de contenu pour la réponse
    response.setContentType("application/json");
          
    // Writer
    //response.getWriter().write(json);
    PrintWriter out = response.getWriter();
    out.print(json);
    out.flush(); 
   }
   
  }
  if(request.getParameter("submit").equals("active"))
  {
   log.info("okidokido!");
  
  }
   
  else log.error("Erreur lors de la recherche de ville");     
 }
}


Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
KX 15774 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 14 octobre 2018 Dernière intervention - 6 juil. 2016 à 00:21
1
Merci
Bonjour,

Si je simplifie ta question tu as :

if (request.getParameter("submit").equals("active")) // ligne 149
{
    log.info("okidokido!");
}

Qui te donne :

juil. 05, 2016 6:01:55 PM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: "Servlet.service()" pour la servlet be.gestisoins.controllers.PatientManagement a généré une exception
java.lang.NullPointerException
    at be.gestisoins.controllers.PatientManagement.doPost(PatientManagement.java:149)

2016-07-05 18:01:57:822 INFO  be.gestisoins.controllers.PatientManagement: okidokido!

Tu ne comprends comment tu peux avoir une Exception et un okidokido en même temps.

La réponse est simple, ces deux logs ont deux secondes d'écart (6:01:55 PM et 18:01:57:822), c'est trop long pour être deux lignes de codes qui se suivent. Par contre c'est un temps correct entre deux essais successifs de la même requête, la première qui plante, la seconde qui réussit.

Si tu modifies par exemple comme ceci :

log.info("Je suis avant");
if (request.getParameter("submit").equals("active"))

Tu obtiendras alors des logs comme ceci (avec deux fois "Je suis avant")

01:55 Je suis avant
01:55 NullPointerException
01:57 Je suis avant
01:57 okidokido

Sinon pour résoudre ton NPE tu peux simplement inverser la condition :

if ("active".equals(request.getParameter("submit")))

Merci KX 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de KX
0
Merci
Bonjour,

Tout d'abord merci pour ta réponse.

J'avais tellement le nez dessus que je ne le voyais pas...

En fait je passe 2 fois dans cette servlet, une fois arrivé sur la page et une fois lors de la validation du formulaire.
Comme j'ai oublié de tester si le paramètre existe, et bien en arrivant sur la page je me prends cette NPE. Ensuite le test réussi car le paramètre existe quand mon formulaire est validé.

Merci encore ;-)
Commenter la réponse de Byron

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.