2012-12-07 5 views
0

J'ai le code suivant dans un servlet:Java Servlets - exception de pointeur nul

try 
{ 
    EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("Flights_AssignmentPU"); 
    EntityManager em = emFactory.createEntityManager(); 

    Query query = em.createNamedQuery("Passengers.findByPassportNum"); 
    query.setParameter("passportNum", passport); 
    List<Passengers> result = query.getResultList();    
    em.close(); 

    for(int i = 0; i < result.size(); i++) 
    { 
     name = result.get(i).getName(); 
     surname = result.get(i).getSurname(); 
     email_address = result.get(i).getEmail(); 
    } 
} 
catch(Exception e) 
{ 
    response.sendRedirect("ErrorPage.html"); 
} 

if(email_address.isEmpty() == false) 
{ 
     //Send email using email address 
} 

Ce code fonctionne très bien lorsque l'utilisateur dispose d'une adresse e-mail dans la base de données. Toutefois, si le champ de courrier électronique est vide dans la base de données, le serveur GlassFish me donne une exception de pointeur nul.

La ligne à blâmer pour cela est sans aucun doute celui-ci:

 email_address = result.get(i).getEmail(); 

Pour une raison quelconque, lorsque l'utilisateur ne dispose pas d'un e-mail, cette ligne me donne l'erreur vient d'être décrit. Comment puis-je résoudre ce problème?

Modifier

Le procédé getEmail est généré automatiquement lors de la création de la classe de l'entité (I ai utilisé persistance).

Voici son code:

public String getEmail() { 
    return email; 
} 
+0

Le problème réside dans 'Passengers.getEmail' la source dont vous n'avez pas inclus. –

+0

Montrez-nous la trace complète de la pile et votre classe d'entité. –

+0

Vous laissez entendre que la 1ère ligne de la pile de la NPE pointe vers la ligne que vous "blâmez". Mais cela semble impossible sur la base de la logique du code affichée jusqu'ici. Pouvez-vous s'il vous plaît réviser vos implications et vos hypothèses? Par ailleurs, le 'sendRedirect()' ne revient pas par magie de la méthode ... – BalusC

Répondre

4

Je pense que cette ligne est question:

if(email_address.isEmpty() == false) 
{ 
     //Send email using email address 
} 

Lorsque la base de données a email vide, vous pourriez obtenir une réponse null. Vous appelez isEmpty() opération sur la référence null, ce qui entraîne NullPointerException.

Est-ce null contrôle avant d'appeler isEmpty()

Exemple:

if(email_address != null && email_address.isEmpty() == false) 
    { 
      //Send email using email address 
    } 
+0

Merci :) Qui a résolu mon problème :) – Matthew

+0

@Matthew: Glad it helps. Bonne chance. – kosa

+0

Merci beaucoup :) – Matthew