Bonjour,
Voici mon problème. Je précise que je ne suis pas en environnement Web mais seulement J2EE/EJB.
J'utilise Velocity pour générer des scripts hexadécimaux via une classe utilitaire : on lui passe le nom du fichier de template et les paramêtres, elle renvoit le script.
Je charge les fichiers par le Classloader car il est impossible d'utiliser le FileClassLoader ni le JarClassLoader : environnement de tests, multi plateforme ...
La classe cherche ce template à la racine du classloader et si elle ne le trouve pas, elle le cherche dans son propre package où il y a les templates par défaut.
Je fais avec JUnit des tests unitaires puis des tests systèmes (dans Glassfish). Les tests systèmes fonctionnent, le principe d'écrasement du template par défaut fonctionne.
En revanche pas moyen de faire marcher les tests unitaires, que ce soit directement dans Eclipse ou via le script ant qui est lancé lors du build automatique. Les traces m'indiquent pourtant que la classe cherche le template au bon endroit !!! D'autant plus étrange que les propriétés Velocity sont situées au même endroit que les templates par défaut, et sont bien trouvés.
Si qqun pouvait m'aider, merci. Ci dessous les sources en question :
L'arborescence des sources est :
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
31
32
33
34
35
36
37 public static String generateScript(String templateName, Map<String, String> params) { try { InputStream is = ScriptProcessor.class.getResourceAsStream("velocity.properties"); Properties properties = new Properties(); properties.load(is); is.close(); Velocity.init( properties ); VelocityContext context = new VelocityContext(); if (params!=null && !params.isEmpty ()) { for (String key : params.keySet ()) { context.put (key, params.get (key)); } } StringWriter sw = new StringWriter(); String EMBEDDED_TEMPLATE_PATH = "com/developper/velocity/"; if (!Velocity.resourceExists (templateFile)) { templateName = EMBEDDED_TEMPLATE_PATH + templateName; } Velocity..mergeTemplate(templateName, "UTF-8", context, sw ); String script = sw.toString (); return script; } catch (Exception e) { log.error("Error while using template to generate the script", e); return ""; } }
Et l'erreur est :com/developper/velocity/
ScriptProcessor
velocity.properties
templateA.vm
templateV.vm
TestScriptProcessor
Merci de m'aider car là je sèche complêtement.org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'com/developper/velocity/templateA.vm'
at org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:452)
at org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:335)
at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1102)
at org.apache.velocity.app.VelocityEngine.mergeTemplate(VelocityEngine.java:498)
at com.developper.velocity.ScriptProcessor.generateScript(ScriptProcesso
Partager