Thymeleaf ClassLoaderTemplateResolver nicht finden können E-Mail-Vorlagen, aber nur auf linux
Sind wir derzeit mit Thymeleaf für eine Spring MVC website. Vor kurzem haben wir beschlossen, es zu benutzen für die Verarbeitung von HTML-E-Mail-Vorlagen. Ich folgte dem Beispiel hier: http://www.thymeleaf.org/doc/springmail.html.
Den ClassLoaderTemplateResolver hat das Präfix "E-Mail/" und die Vorlagen gespeichert sind, in eine "E-Mail" sub-Ordner unter "src/main/resources/", was zu sein scheint, wo es aussieht für Sie.
Alles funktioniert auf meinem Entwicklungsrechner unter Windows 7/Tomcat7/Eclipse, aber nicht wenn ich veröffentlichen .war-Datei zu Amazon ' s EC2 (Linux-Umgebung/Tomcat7) und versuchen, eine E-Mail erzeugen. Dies ist der Fehler:
FEHLER C: U: org.thymeleaf.TemplateEngine -
[THYMELEAF][pool-2-thread-2] Exception processing Vorlage
"email_template.html": Ressource Auflösung von ServletContext
mit org.thymeleaf.resourceresolver.ServletContextResourceResolver können
nur durchgeführt werden, wenn der Kontext implementiert
org.thymeleaf.Kontext.IWebContext [aktuellen Kontext:
org.thymeleaf.Kontext.Kontext]
Bekomme ich diese Fehlermeldung, passiert auf meinem windows-dev-Maschine, wenn ich das löschen/umbenennen der Vorlage von /src/main/resources/E-Mail, So dass ich ' m vorausgesetzt, die ClassLoaderTemplateResolver nicht finden können, die Vorlage und anschließend die template-engine versucht, die ServletContextResourceResolver kann nicht verwendet werden, da es nicht mit einem WebContext.
Die java-basierte Konfiguration sieht wie folgt aus:
@Bean
public ServletContextTemplateResolver templateResolver() {
final ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
resolver.setPrefix("/WEB-INF/templates/");
resolver.setTemplateMode("HTML5");
resolver.setCharacterEncoding(appSettings.getDefaultEncoding());
resolver.setOrder(2);
resolver.setCacheable(!appSettings.isDebugMode() || !appSettings.isOneBoxMode());
return resolver;
}
@Bean ClassLoaderTemplateResolver emailTemplateResolver() {
final ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
resolver.setPrefix("email/");
resolver.setTemplateMode("HTML5");
resolver.setCharacterEncoding(appSettings.getDefaultEncoding());
resolver.setOrder(1);
return resolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
final SpringTemplateEngine engine = new SpringTemplateEngine();
final Set<TemplateResolver> templateResolvers = new HashSet<TemplateResolver>();
templateResolvers.add(templateResolver());
templateResolvers.add(emailTemplateResolver());
engine.setTemplateResolvers(templateResolvers);
return engine;
}
Und der code zum generieren der E-Mail sieht wie folgt aus:
final String template = "email_template.html";
//prepare the context
final Context ctx = new Context(LocaleContextHolder.getLocale());
//create the body using ThymeLeaf
final String htmlContent = templateEngine.process(template, ctx);
Komischerweise habe ich schon Beispiele gesehen, die ClassLoaderTemplateResolver mit dem Präfix "/META-INF/templates" und ähnliches. Nicht den Pfad unter "src/main/resources" und NICHT "/src/main/webapp"? Ich habe auch versucht, um es zu ersetzen mit einem FileTemplateResolver, aber egal was ich auch versuchte, ich konnte nicht herausfinden, wo die template-Dateien und welchen Weg legen Sie das Präfix an.
Was anders sein könnte zwischen meinem windows dev-Maschine, und der Amazon linux-box? Auf den ersten, habe ich angenommen, dass groß-und Kleinschreibung von filepaths könnte der Täter sein, aber ich beseitigt, dass als eine Möglichkeit.
Hilfe!!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
annnnnnnd ich bin ein idiot... ich hatte einen umgekehrten Schrägstrich zwischen den Ordnernamen, wo die E-Mail-Vorlagen gespeichert und die E-Mail-Vorlage einen Namen, z.B. "folder\template.html" an Stelle von "folder/template.html". dies funktioniert auf windows, aber nicht unter linux.
Haben Sie bereitstellen, die den Krieg vor Ort? Oder Sie testen in eclipse? Wenn Sie nicht mit den Krieg lokal zu Verpacken, die den Krieg genauso wie Sie tun, wenn Sie es bereitstellen. Entpacken Sie es und stellen Sie sicher, dass Ihre Vorlagen in WEB-INF/classes
Nur eine Randnotiz, über die META-INF hab ich gehostet config-Dateien von /META-INF/für spring-Projekte vor, sein mein SpringMVC Kontext config, die ich gespeichert unter WEB-INF.