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!!!

Schreibe einen Kommentar