2013-05-31 3 views
0

Я пытаюсь отправить электронное письмо с использованием шаблона тимелеафа. Но я получаю сообщение об ошибке какотправка почты используя тимелеар весна Schedular

org.thymeleaf.exceptions.TemplateProcessingException: Resource resolution by ServletContext with org.thymeleaf.resourceresolver.ServletContextResourceResolver can only be performed when context implements org.thymeleaf.context.IWebContext [current context: org.thymeleaf.context.Context] 
    at org.thymeleaf.resourceresolver.ServletContextResourceResolver.getResourceAsStream(ServletContextResourceResolver.java:74) 
    at org.thymeleaf.TemplateRepository.getTemplate(TemplateRepository.java:221) 
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1192) 
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1148) 
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1095) 
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1008) 
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:982) 
    at in.coep.vlabteam.leap.implementations.ScheduleNotificationImpl.sendNotification(ScheduleNotificationImpl.java:205) 
    at in.coep.vlabteam.leap.implementations.ScheduleNotificationImpl.sendScheduleNotificationMail(ScheduleNotificationImpl.java:105) 
    at in.coep.vlabteam.leap.services.ScheduleNotificationService.sendScheduleNotificationByMail(ScheduleNotificationService.java:47) 
    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.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:64) 
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:53) 
    at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
10936 [taskScheduler-1] ERROR org.thymeleaf.TemplateEngine - [THYMELEAF][taskScheduler-1] Exception processing template "scheduleMail.html": Resource resolution by ServletContext with org.thymeleaf.resourceresolver.ServletContextResourceResolver can only be performed when context implements org.thymeleaf.context.IWebContext [current context: org.thymeleaf.context.Context] 

Я не могу использовать WebContext() вместо Context(). Потому что для webContext мне нужен объект HttpServletRequest, который я не могу получить здесь, потому что он не входит в объем запроса. Я пытаюсь отправить почту с помощью context(), но я получаю сообщение об ошибке. Пожалуйста, у кого есть решение по этому вопросу. Заранее спасибо Вот мой код,

final Context ctx = new Context(); 
    ctx.setVariable("eagletId", user.getEagletId()); 
    ctx.setVariable("name", user.getFirstName()); 
    ctx.setVariable("setSentDate", new Date()); 
    ctx.setVariable("department", user.getDepartment()); 
    ctx.setVariable("batch", user.getBatch()); 
    // ctx.setVariable("month" Constants.LeapConstants.UserType); 

    // Prepare message using a Spring helper 
    final MimeMessage mimeMessage = this.mailSender.createMimeMessage(); 
    final MimeMessageHelper message = 
      new MimeMessageHelper(mimeMessage, true /* multipart */, "UTF-8"); 
    message.setSubject("Create your report for month"); 
    message.setFrom("[email protected]"); 
    message.setTo("[email protected]"); 

    // Create the HTML body using Thymeleaf 
    final String htmlContent = this.templateEngine.process("scheduleMail.html", ctx); 
    message.setText(htmlContent, true /* isHtml */); 

    // Send mail 
    this.mailSender.send(mimeMessage); 

ответ

2

Ваш шаблон двигатель настроен с ServletContextTemplateResolver вместо либо FileTemplateResolver или ClassLoaderTemplateResolver. Это будет определено, скорее всего, в конфигурационном файле весны где-нибудь. Если сконфигурировано в коде, см. Thymeleaf user's guide on configuring the template engine и configuration of the templateResolver. Это хороший док.

Via конфигурации XML, он должен выглядеть примерно так:

<beans:bean id="templateResolver" 
    class="org.thymeleaf.templateresolver.ClassLoaderTemplateResolver"> 
</beans:bean>