Partage
  • Partager sur Facebook
  • Partager sur Twitter

objet non instancié

Sujet résolu
    24 janvier 2012 à 9:38:18

    Bonjour à tous
    voilà j'aimerai pouvoir envoyer un mail a la validation d'un mail
    Mais eclipse me renvoi cette erreur: java.lang.NullPointerException

    Je ne sais pas quelle objet n'est pas instancié
    j'utilise javamail alors je ne connais pas grand chose meme en visitant la doc Sun
    package com.log.servlet;
    
    import javax.servlet.*;
    import javax.servlet.http.*;
    
    import java.io.*;
    
    import javax.mail.*;
    import javax.mail.internet.*; // important
    import javax.mail.event.*; // important
    import java.net.*;
    import java.util.*; 
    
    public class mailservlet extends HttpServlet{
    	private static final long serialVersionUID = 1L;
    
    	public void doGet(HttpServletRequest request,HttpServletResponse response)
    			throws ServletException, IOException
    			{
    			PrintWriter out=response.getWriter();
    			response.setContentType("text/html");
    
    			try
    			{			
    			Properties props=new Properties();
    			props.put("mail.smtp.host","localhost"); // 'localhost' for testing
    			Session session1 = Session.getDefaultInstance(props,null);
    			String s1 = request.getParameter("fichier"); //sender (from)
    			String s2 = request.getParameter("persomail");
    			String s3 = request.getParameter("contact1");
    			Message message =new MimeMessage(session1);
    			message.setFrom(new InternetAddress(s2));
    			message.setRecipients
    			(Message.RecipientType.TO,InternetAddress.parse(s3,false));
    			message.setSubject(s1);
    			message.setText(s1);
    			Transport .send(message);
    			out.println("mail has been sent");
    
    			}
    
    			catch(Exception e)
    			{
    				e.printStackTrace();
    			}
    
    			} 
    	public void doPost(HttpServletRequest request, HttpServletResponse response)						
    			throws IOException, ServletException{
    			doGet(request, response);
    		}
    	
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      24 janvier 2012 à 9:47:09

      Salut,

      Pourrais tu poster la trace complète générée par l'exception. Grâce à elle, on aura une bonne idée de quelle ligne pose problème :)
      • Partager sur Facebook
      • Partager sur Twitter
        24 janvier 2012 à 9:51:02

        d'ailleur en parlant de sa
        j'ai jamais compris toutes ces erreurs enfin commennt est construit un message d'erreur de la console
        tu peux m'expliquer ?

        java.lang.NullPointerException
        at javax.mail.internet.InternetAddress.parse(InternetAddress.java:673)
        at javax.mail.internet.InternetAddress.parse(InternetAddress.java:633)
        at javax.mail.internet.InternetAddress.<init>(InternetAddress.java:111)
        at com.log.servlet.mailservlet.doGet(mailservlet.java:32)
        at com.log.servlet.mailservlet.doPost(mailservlet.java:50)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at com.log.filter.ConnexionFilter.doFilter(ConnexionFilter.java:28)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
        • Partager sur Facebook
        • Partager sur Twitter
          24 janvier 2012 à 11:36:14

          Salut, la trace représente tous les appels successif réalisé par la jvm en haut c'est la methode qui à généré l'erreur et chaque ligne du dessous représente par quelle méthode et depuis quelle objet est appelé la méthode de la ligne du dessus.
          Dans ton cas il semble que InternetAddress soit null, donc si je regarde ton code j'en déduit que le paramètre que tu récupère "persomail" est null met un system.out.print pour voir si s2 n'est pas null
          • Partager sur Facebook
          • Partager sur Twitter
            24 janvier 2012 à 12:03:46

            J'ai mis: System.out.println(s2);
            juste en dessous de là ou je récupère mes variables, il ne m'affiche rien dans la console
            Direct l'erreur
            • Partager sur Facebook
            • Partager sur Twitter
              24 janvier 2012 à 12:36:29

              C'est bizarre.

              Soit c'est pas la même erreur (auquel cas donnes-nous ton nouveau code et la nouvelle erreur), soit tu n'as pas recompilé / relancé ton serveur web.
              • Partager sur Facebook
              • Partager sur Twitter
                24 janvier 2012 à 13:48:57

                J'ai bien redémarré le serveur

                Voici le code que j'ai juste modifié pour ajouter le print:
                package com.log.servlet;
                
                import javax.servlet.*;
                import javax.servlet.http.*;
                import java.io.*;
                import javax.mail.*;
                import javax.mail.Authenticator;
                import javax.mail.PasswordAuthentication;
                import javax.mail.internet.*; // important
                import javax.mail.event.*; // important
                import java.net.*;
                import java.util.*; 
                
                public class mailservlet extends HttpServlet{
                	private static final long serialVersionUID = 1L;
                
                	public void doGet(HttpServletRequest request,HttpServletResponse response)
                			throws ServletException, IOException
                			{
                			PrintWriter out=response.getWriter();
                			response.setContentType("text/html");
                
                			try
                			{			
                			Properties props=new Properties();
                			props.put("smtp.orange.fr","host");
                			Session session1 = Session.getDefaultInstance(props,null);
                			String s1 = request.getParameter("fichier");
                			String s2 = request.getParameter("persomail");
                			String s3 = request.getParameter("contact1");
                			System.out.println(s2);
                			Message message =new MimeMessage(session1);
                			message.setFrom(new InternetAddress(s2));
                			message.addRecipient(Message.RecipientType.TO, new InternetAddress(s2));
                			message.setSubject(s1);
                			message.setText(s1);
                			Transport .send(message);
                			out.println("mail has been sent");
                
                			}
                
                			catch(Exception e)
                			{
                				e.printStackTrace();
                			}
                
                			} 
                	public void doPost(HttpServletRequest request, HttpServletResponse response)						
                			throws IOException, ServletException{
                			doGet(request, response);
                		}
                }
                


                et le code erreur si vous le revoulez:
                java.lang.NullPointerException
                at javax.mail.internet.InternetAddress.parse(InternetAddress.java:673)
                at javax.mail.internet.InternetAddress.parse(InternetAddress.java:633)
                at javax.mail.internet.InternetAddress.<init>(InternetAddress.java:111)
                at com.log.servlet.mailservlet.doGet(mailservlet.java:33)
                at com.log.servlet.mailservlet.doPost(mailservlet.java:50)
                at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
                at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
                at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
                at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
                at com.log.filter.ConnexionFilter.doFilter(ConnexionFilter.java:28)
                at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
                at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
                at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
                at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
                at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
                at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
                at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
                at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
                at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
                at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
                at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
                at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
                at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
                at java.lang.Thread.run(Unknown Source)
                • Partager sur Facebook
                • Partager sur Twitter
                  24 janvier 2012 à 14:08:24

                  Donc effectivement le code a été compilé et le serveur redémarré puisque l'erreur est désormais indiquée ligne 33 et non plus 32.

                  Soit t'as loupé un truc dans la console, soit il l'a écrit ailleurs, soit ta chaîne vaut "", soit ...

                  Commence par vérifier les chaînes que tu récupères en paramètre de la requête.
                  Si ça foire en faisant System.out.println() cherche une autre solution.
                  1/ Ecrit dans un fichier texte (sans oublier de faire un "close()" avant la ligne qui génère l'exception
                  2/ Mets en commentaire les lignes suivantes (celles qui font planter) et écrit les valeurs de tes chaînes directement dans l'objet response (response.write).

                  Mais le problème vient bel et bien de s2, qui est probablement null, ou tout au moins ne respecte pas le format d'une InternetAddress.

                  Quand ça plante, on cherche, on fouille. Si on ne voit rien, on teste une autre solution.

                  Tu n'apprendras rien (ou tout au moins tu apprendras 100 fois moins vite) en demandant de l'aide au moindre écueil.

                  Les bonnes questions à se poser dans ton cas :
                  NullPointerException indique que quelque chose est null. Où ça ? Dans InternetAddress.parse(), donc c'est que je lui donne en paramètre un truc pas bon. C'est quoi le paramètre ? s2. Ah bah tiens si j'affichais s2 ! Ça ne veut pas s'afficher dans la console, qu'à cela ne tienne, je l'affiche ailleurs.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 janvier 2012 à 14:13:10

                    Ok Javier, je vous tiens au courant ;)

                    [EDIT] j'ai mis ma variable en dehors du try
                    Je la voit en "null"
                    Etrange ...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 janvier 2012 à 14:16:08

                      PS : Prends l'habitude, lorsque tu veux tester une variable ou mettre des traces, d'écrire :
                      System.out.println("ma variable s2 vaut : "+s2);


                      Et pas simplement :
                      System.out.println(s2);


                      D'une part, si une variable vaut "" (chaîne vide), avec la seconde solution tu ne verras pas grand chose (une ligne sautée), avec la première tu t'en rendras mieux compte.

                      D'autre part c'est beaucoup plus facile à rechercher (dans des fichiers de logs gigantesques par exemple).
                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 janvier 2012 à 14:17:22

                        Ok je vais appliquer ton ( tes ) précieux conseils
                        N'empeche j'ai bien appris depuis le début ( tu t'en souviens ^^ )
                        Merci a toi

                        j'ai édité mon précédent post

                        [EDIT]
                        meme ma s1 vaut null, c'est quoi ce *******

                        [Re-EDIT]
                        j'ai trouvé: j'ai remarqué que j'avais mis sa dans la balise <form>: enctype="multipart/form-data"
                        ET quand j'enlève sa fonctionne pourquoi je ne sais pas ^^
                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 janvier 2012 à 14:35:36

                          Tu as fait getParameter, mais tu l'as peut être mis en tant qu' attribute dans ta request, dans ce cas c'est (String)request.getAttribute("...").
                          Et on ne sait pas non plus comment tu envoi ces parametres, on peut voir ta jsp ou ton code page en tous cas?

                          EDIT: Un autre conseil, essaye de lancer ton serveur en mode debug, car cela t'évite de mettre des system.out ou log partout et en plus tu peut modifier ton code à chaud.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 janvier 2012 à 14:38:23

                            Vous savez pourquoi sa fait sa ?
                            et j'ai également une question, vous a déjà envoyé des mails avec une jsp et servlet ?
                            voici ma jsp "correct":
                            <%@page pageEncoding="Cp1252" contentType="text/html; charset=Cp1252" %>
                            <%@ page import="java.util.HashMap" %>
                            <%@ page import="java.io.*"%>
                            <%@ page import="java.sql.*"%>
                                <%
                                	//On récupère la liste des cookies
                                	Cookie[] cookies = request.getCookies();
                                	HashMap map = new HashMap();
                                	//S'il y a au moins un cookie, on stocke les clés-valeurs dans une Map
                                	if(cookies != null){	    	
                            	    	for(Cookie cookie : cookies){
                            	    		map.put(cookie.getName(), cookie.getValue());
                            	    	}
                                	}
                                	
                                	//Ainsi, si des données existent, on pourra préremplir les champs de notre formulaire
                                %>
                                <%
                                // Information d'accès à la base de données
                            		String url = "jdbc:mysql://localhost/clientFTP";
                            		String login = "root";
                            		String passwd = "";
                            		Connection cn =null;
                            		Statement st =null;
                            		ResultSet rs =null;
                            		Integer dl = null;
                            		Integer up = null;
                            		Integer nbr_jour = 0;
                            		
                            		try {
                            
                            			// Etape 1 : Chargement du driver
                            			Class.forName("com.mysql.jdbc.Driver");
                            
                            			// Etape 2 : récupération de la connexion
                            			cn = DriverManager.getConnection(url, login, passwd);
                            
                            			// Etape 3 : Création d'un statement
                            			st = cn.createStatement();
                            
                            			String sql = "SELECT * FROM user";
                            
                            			// Etape 4 : exécution requête
                            			rs = st.executeQuery(sql);
                            
                            			// Si récup données alors étapes 5 (parcours Resultset)
                            
                            			while (rs.next()) {
                            				dl = rs.getInt("upload");
                            				up = rs.getInt("download");
                            				nbr_jour = rs.getInt("jour");
                            				
                            			}
                            		} catch (SQLException e) {
                            			e.printStackTrace();
                            		} catch (ClassNotFoundException e) {
                            			e.printStackTrace();
                            		} finally {
                            			try {
                            			// Etape 6 : libérer ressources de la mémoire.
                            				cn.close();
                            				st.close();
                            			} catch (SQLException e) {
                            				e.printStackTrace();
                            			}
                            		}
                            	%>
                            <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
                            <html>
                            <head>
                            <meta http-equiv="Content-Type" content="text/html; charset=Cp1252"/>
                            <title>Sydel - Envoyer vos Documents</title>
                             <STYLE type="text/css">
                              	.tableau{
                              		border: 1px solid black;
                              	}
                              </STYLE>
                            </head>
                            <body style="width:70%;height: auto;margin: 0 auto 0 auto;border: 1px ridge gray;">
                            
                            <div id="banniere" style="width: 100%; height: 25%"><img src="image/banniere.PNG" height="200px" width="100%"/></div>
                            
                            <div id="info_user" style="width: 30%;margin: 5% auto 0 auto;">
                            	<table style="height: 25%;border:1px solid black;border-collapse:collapse;">
                            		<tr>
                            			<td class="tableau" width="60%">Utilisateur</td>
                            			<td class="tableau" width="40%"><%=((map.get("login") != null) ? map.get("login") : "") %></td>
                            		</tr>
                            		<tr>
                            			<td class="tableau">Taille maximum par fichier</td>
                            			<td class="tableau">5 Go</td>
                            		</tr>
                            		<tr>
                            			<td class="tableau">Nombre de fichiers uploader</td>
                            			<td class="tableau"><% out.print(dl); %></td>
                            		</tr>
                            		<tr>
                            			<td class="tableau">Nombre de fichiers téléchargé</td>
                            			<td class="tableau"><% out.print(up); %></td>
                            		</tr>
                            		<tr>
                            			<td class="tableau">Limite de jour</td>
                            			<td class="tableau"><% if(nbr_jour>30){out.print("illimité");}else{out.print(nbr_jour);} %></td>
                            		</tr>
                            	</table>
                            </div>
                            
                            <div id="form_transfert" style="width: 40%;margin: 5% auto 0 auto;">
                            	<table>
                            	<form enctype="multipart/form-data"  action="mailservlet.do" method="POST" name="formulaire_transfert">
                            		<tr>
                            			<td>Fichier à envoyer:</td>
                            			<td><input name="fichier" type="file" size="20" maxlength="100000" accept="text/*"></td>
                            		</tr>
                            		<tr>
                            			<td>M'informer du lien par email:</td>
                            			<td><INPUT type=text name="persomail" size="34"></td>
                            		</tr>
                            		<tr>
                            			<td>Contact n°1:</td>
                            			<td><INPUT type=text name="contact1" size="34"></td>
                            		</tr>
                            		<tr>
                            			<td>Contact n°2:</td>
                            			<td><INPUT type=text name="contact2" size="34"></td>
                            		</tr>
                            		<tr>
                            			<td>Contact n°3:</td>
                            			<td><INPUT type=text name="contact3" size="34"></td>
                            		</tr>
                            		<tr>
                            			<td><br><input name="envoyer" type="submit" value="Envoyer"></td>
                            			<td><br><input name="reset" type="reset" value="Annuler"></td>
                            		</tr>
                            	</form>
                            	</table>
                            </div>
                            
                            <div id="copyright" style="margin-top: 5%;" align="center"><p class="copyright" align="center">&copy; Copyright Sydel - 2012</p></div>
                            </body>
                            </html>
                            
                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 janvier 2012 à 14:42:30

                              Pour les mail, il te faut un serveur smtp.

                              EDIT : pour ton form pourquoi t'as mis ça : enctype="multipart/form-data" ? Essaye sans déjà.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 janvier 2012 à 14:44:55

                                Oui l'entreprise ou je suis m'a mis a disposition un serveur tournant sur Centos, un gars est venue le configurer ce matin
                                Mais je ne sais pas du tout par quel bout commencé
                                Et dieux sait combien de temps j'ai passé a me renseigner sur google
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  24 janvier 2012 à 14:46:37

                                  Bonjour,

                                  Tu a bien dit que tu avais mis un <form>: enctype="multipart/form-data ??

                                  J'ai eu le même problème il y a quelques jours. Avec ce enctype tu ne peux récupérer que le fichier. Pour récupérer tes variables il faut que tu regarde du coté du package Multiparser.
                                  Tu trouvera plein d'exemple sur internet en tapant variable null enctype multipart/form-data

                                  Donc oui ça vient de la tes variables à null.
                                  Bon courage.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    24 janvier 2012 à 14:49:14

                                    Une fois que tu as le host et le port smtp tu utilise l'api javax Mail pour definir ton mail et le serveur par lequel l'envoyer.
                                    Pour tes parametre c'est bizzard mais essaye de faire du debug, de tracer le getParameterValues...etc, comme dit Javier, il faut fouiller partout trouver différente manière d'obtenir des information sur le comportement de ton appli.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      24 janvier 2012 à 14:49:54

                                      Ok oui j'ai supprimer ce enctype et là je peux récupérer mes variables
                                      En fait je dois récupérer un ou des fichiers sur un pc client et l'envoyer sur un serveur
                                      ET on peut signaler par mail qu'un fichier à été uploader
                                      ce n'est pas une mince affaire ^^

                                      [EDIT]
                                      Le host ?
                                      le nom quoi non ?
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        24 janvier 2012 à 14:51:35

                                        Normalement, cela ne devrait pas être trop compliqué, ne te décourage pas trop vite, vite quand tu aura fini, tu te dira: "ouha, en fait c'est trop simple!". Bon codage.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          24 janvier 2012 à 14:53:42

                                          Ce n'est pas trop compliqué à codé.
                                          De plus, tu peux trouver facilement sur le net. Si tu n'y arrive vraiment pas je te passerais le code.

                                          En fait avec la libraire de O'Reilly's : MultipartParser, en premier lieu tu récupère le fichier a envoyer et ensuite seulement tu récupère les autres variables (texte par exemple).
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            24 janvier 2012 à 14:57:02

                                            D'accords ok
                                            Parce que là pour le moment je ne peux pas récupérer mon fichier sans le truc que j'ai enlevé ?
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              24 janvier 2012 à 14:58:37

                                              En fait si tu ne veux pas t’embêter soit tu peux récupérer ton fichier avec l'enctype mais sans aucune variables à coté! Soit tu récupère que des variables et pas de fichier en enlevant ton enctype.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                24 janvier 2012 à 15:01:03

                                                Ah et quand on veut les deux ben ... on s'énerve ? ^^
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  24 janvier 2012 à 15:02:24

                                                  Tu utilises la libraire O'Reilly's MultiParser dont je t'ai parlé ^^
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    24 janvier 2012 à 15:10:13

                                                    Bon je vais aller voir sa alors
                                                    Encore une librairie
                                                    et en anglais :(
                                                    Merci l'ami ;) !!
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      24 janvier 2012 à 15:10:51

                                                      N'hésite pas si tu a besoin.

                                                      De l'amiE ^^
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter

                                                      objet non instancié

                                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                      • Editeur
                                                      • Markdown