2017-07-24 3 views
0

Je peux accéder aux modèles lorsque j'exécute mon projet localement en eclipse en utilisant un serveur Wildfly. Cependant, il ne parvient pas à trouver les modèles lorsque je l'exécute sur mon serveur prod.VelocityEngine: Ressource de modèle non trouvée

Mes modèles vm se trouve dans un paquet: com.email.templates

J'ai vérifié le dossier WEB-INF et je peux voir que les modèles sont assis dans:

myapp.war\WEB-INF\classes\com\email\templates\ 

J'initialiser mon VelocityEngine avec les propriétés suivantes:

Properties prop = new Properties(); 
prop.put(RuntimeConstants.RESOURCE_LOADER, "class"); 
prop.put("class.resource.loader.class", ClasspathResourceLoader.class.getName()); 
this.velocityEngine.init(prop); 

J'ai essayé les deux méthodes suivantes lorsque vous essayez de chercher t Modèle de l'ourlet:

via org.springframework.ui.velocity.VelocityEngineUtils

Map<String, String> model = new HashMap<String, String>(); 
    model.put("payload", "some payload"); 
    String body = VelocityEngineUtils.mergeTemplateIntoString(this.velocityEngine , "/com/email/templates/my_template.vm", model); 

via org.apache.velocity.app.VelocityEngine

StringWriter writer = new StringWriter(); 
VelocityContext context = new VelocityContext(); 
context.put("payload", "some payload") 
Template template = this.velocityEngine.getTemplate("/com/email/templates/my_template.vm"); 
template.merge(context, writer); 
+0

Utilisez-vous 'Maven'? . Regardez comme votre chemin incorrect définitivement. – soorapadman

+0

J'ai ajouté prop.setProperty ("runtime.log.logsystem.class", "org.apache.velocity.runtime.log.CommonsLogLogChute"). Cela semble avoir résolu le problème. – Fabii

Répondre

0

Votre modèle pas dans la classpath Vous devez avoir un modèle dans le dossier resources plutôt que web app. C'est au travail, je crois que vous devez avoir WebappResourceLoader

Properties props = new Properties(); 
props.setProperty("resource.loader", "webapp"); 
props.setProperty("myapp.resource.loader.class", "org.apache.velocity.tools.view.WebappResourceLoader"); 
props.setProperty("webapp.resource.loader.path", "classes\com\email\templates"); 
VelocityEngine engine = new VelocityEngine(props); 

EDIT: Si vous chargez du dossier Ressources utilisez toujours ci-dessous le code:

velocityEngine.setProperty(RuntimeConstants.RESOURCE_LOADER, "class,file"); 
velocityEngine.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS, "org.apache.velocity.runtime.log.Log4JLogChute"); 
velocityEngine.setProperty("runtime.log.logsystem.log4j.logger", "VELLOGGER"); 
velocityEngine.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); 
velocityEngine.setProperty("runtime.log.logsystem.class", "org.apache.velocity.runtime.log.NullLogSystem");