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

Spring Web Java Discussion :

[Spring/Velocity] Template introuvable (oui, encore ^^)


Sujet :

Spring Web Java

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut [Spring/Velocity] Template introuvable (oui, encore ^^)


    J'essaie d'utiliser la classe SimpleMailMessage pour envoyer un mail avec Spring dans une appli Web. Je n'arrive pas à la faire fonctionner. Précision : je débute en Spring

    Voici la configuration applicationContext.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    	<property name="host" value="smtp.free.fr"/>
    </bean>
     
    <bean id="templateMessage" class="org.springframework.mail.SimpleMailMessage">
    	<property name="from" value="contact@monsite.fr"/>
    	<property name="subject" value="Sujet"/>
    </bean>
     
    <bean id="sendMail" class="fr.web.montana.utils.SendMail">
    	<property name="mailSender" ref="mailSender"/>
    	<property name="templateMessage" ref="templateMessage"/>
    </bean>
    Et la classe basique pour l'instant qui envoie des mails :
    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
    import org.springframework.mail.MailException;
    import org.springframework.mail.MailSender;
    import org.springframework.mail.SimpleMailMessage;
     
    public class SendMail {
     
    	private MailSender mailSender;
    	private SimpleMailMessage templateMessage;
     
    	public void setMailSender(MailSender mailSender) {
    		this.mailSender = mailSender;
    	}
     
    	public void setTemplateMessage(SimpleMailMessage templateMessage) {
    		this.templateMessage = templateMessage;
    	}
     
    	public void sendMessage(String body) {
     
    		SimpleMailMessage msg = new SimpleMailMessage(this.templateMessage);
    		msg.setTo("mailtest@fai.fr");
    		msg.setText(body);
    		try {
    		    this.mailSender.send(msg);
    		}
    		catch(MailException ex) {
    			log.error(ex.getMessage());            
    		}
    	}
    }
    J'ai l'erreur suivante :
    24/11/2008 15:16:56 [DEBUG] servlet.DispatcherServlet.[] : Handler execution resulted in exception - forwarding to resolved error view: ModelAndView: reference to view with name 'error-fatal'; model is {exception=java.lang.IllegalArgumentException: The 'original' message argument cannot be null}
    java.lang.IllegalArgumentException: The 'original' message argument cannot be null
    at org.springframework.util.Assert.notNull(Assert.java:112)
    at org.springframework.mail.SimpleMailMessage.<init>(SimpleMailMessage.java:73)
    at fr.web.montana.utils.SendMail.sendMessage(SendMail.java:37)
    at fr.web.montana.web.RegistrationController.addUser(RegistrationController.java:106)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:413)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:134)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:310)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:297)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Unknown Source)

    Ca semble relatif à la vue error-fatal mais c'est provoqué par l'envoi du mail.

    D'autre part, pour utiliser le SMTP de mon FAI (en test) et plus tard celui de l'hébergeur, on n'a pas besoin d'un login et mot de passe ? Seul l'hôte est spécifié, ça suffit ?

    Merci de votre aide !

  2. #2
    Rédacteur
    Avatar de Hikage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 177
    Par défaut
    Le problème est que lors de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SimpleMailMessage msg = new SimpleMailMessage(this.templateMessage);
    this.template est null apparement, mais ta configuration semble correcte.


    Serait il possible de voir ta classe RegistrationController? Tu récupere bien ton bean SendMail via Spring ?
    Hikage
    SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified
    [Personal Web] [CV]

    F.A.Q Spring Framework - Participez !

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut
    Le bean SendMail est pour l'instant instancié dans le RegistrationController, mais pas via Spring. Je crois que je commence à comprendre : il faut qu'il soit "autowired" dans le contrôleur qui va l'utiliser afin qu'il soit initialisé par la config Spring.

    Donc si je rajoute un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SendMail sendMail;
     
    @Autowired
    public void setSendMail(SendMail sendMail) {
      this.sendMail = sendMail;
    }
    et que j'utilise cet objet là au lieu de celui que j'instanciais avant, ça devrait marcher ? Je fais le test ce soir ! Merci en tout cas !

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut
    C'était bien ça, ça marche !

    Merci !

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut
    Je remonte le topic car je me suis vite rendu compte que les possibilités étaient limitées. J'ai donc essayé d'utiliser Velocity pour faire des templates pour mes mails. Seulement, il n'arrive pas à trouver le template, problème récurrent semble t'il... J'ai vu des solutions sur le web mais je ne sais pas comment les mettre en place.

    Voici ma classe d'envoi du mail :
    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
    public void sendActivationMessage(final User user, final String activationUrl, final String from) {
     
    	MimeMessagePreparator preparator = new MimeMessagePreparator() {
    		public void prepare(MimeMessage mimeMessage) throws Exception {
    			String template;
    			template = "activationMailTemplate_fr.html";			
    			MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
    			message.setTo(user.getEmail());
    			message.setFrom(from);
    			Map<Object, Object> model = new HashMap<Object, Object>();
    			model.put("user", user);
    			model.put("activationUrl", activationUrl);				
    			String text = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, template, model);
    			message.setText(text, true);
    		}
    	};
    	this.mailSender.send(preparator);
    }
    Elle se trouve dans le même package que le template (on va dire fr.mail). J'ai vu qu'il fallait initialiser les properties de Velocity, mais je ne sais pas comment le faire.

    Par exemple :
    http://www.developpez.net/forums/d42...e-introuvable/
    http://www.developpez.net/forums/d24...able-velocity/

    Je suis sensé mettre ça où ? Comment lui préciser explicitement que le template est le fichier fr/mail/activationMailTemplate_fr.html ? Faut-il le placer ailleurs (pas dans un package), où dans ce cas ?

    Merci de l'aide !

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut
    Bon je l'ai mis dans le dossier spring (avec les .properties) et ça marche sans toucher à l'init de Velocity. Par contre j'aimerais quand même bien savoir comment faire, des fois que je bouge les templates.

Discussions similaires

  1. [Velocity] Template introuvable
    Par tchoukapi dans le forum Documents
    Réponses: 3
    Dernier message: 03/10/2007, 18h24
  2. Template introuvable avec Velocity
    Par djanggawul dans le forum Documents
    Réponses: 2
    Dernier message: 10/01/2007, 17h01
  3. Et oui encore un probleme d'icone dans une Jframe
    Par frett dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 17/02/2006, 15h12
  4. Velocity Template/Tag library : comparaison ?
    Par joseph_p dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 09/11/2005, 13h47
  5. Drivers ODBC, ADO et IB (et oui encore!! )
    Par lio33 dans le forum Débuter
    Réponses: 1
    Dernier message: 14/09/2005, 09h51

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