Hello,
I just want to kindly ping my question below one last time. Unfortunately I have not yet found the way the Velocity Tools are intended to be used in an Application. Is somebody able to give me a hint? Thank you so much! Stefan Hello everone, I am sorry that I have yet another question. I would like to use some of the Standard Tools https://velocity.apache.org/tools/3.1/tools-summary.html . (By the way, it has not become clear to me, what the relationship between Standard Tools and Generic Tools is.) This example https://velocity.apache.org/tools/3.1/standalone.html and this one https://github.com/apache/maven-doxia-sitetools/commit/0abee78da740501fc0584f65e06c1007229f58d6 suggest to me that all I have to do to access Tools like $esc, $display or $context is to replace - VelocityContext context = new VelocityContext(); + VelocityEngine ve = new VelocityEngine(); + ToolManager manager = new ToolManager(true, true); + manager.setVelocityEngine(ve); + logger.debug("hasApplicationTools: {}", manager.hasApplicationTools()); + logger.debug("hasRequestTools: {}", manager.hasRequestTools()); + Context context = manager.createContext(); But using this context, the hasApplicationTools() and hasRequestTools() functions return false and e.g. there is no $context available to the template: 06:26:53.292 [main] DEBUG o.apache.velocity.tools.ToolManager - VelocityEngine instance was changed to org.apache.velocity.app.VelocityEngine@70a9f84e 06:26:53.293 [main] DEBUG d.h.etiketten.VelocityTemplateEngine - hasApplicationTools: false 06:26:53.294 [main] DEBUG d.h.etiketten.VelocityTemplateEngine - hasRequestTools: false 06:26:53.297 [main] DEBUG org.apache.velocity - Initializing Velocity, Calling init()... 06:26:53.298 [main] DEBUG org.apache.velocity - Starting Apache Velocity v2.3 06:26:53.302 [main] DEBUG org.apache.velocity - Default Properties resource: org/apache/velocity/runtime/defaults/velocity.properties 06:26:53.333 [main] DEBUG VelocityEngine - ResourceLoader instantiated: org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader 06:26:53.340 [main] DEBUG VelocityEngine - initialized (class org.apache.velocity.runtime.resource.ResourceCacheImpl) with class java.util.Collections$SynchronizedMap cache map. 06:26:53.347 [main] DEBUG VelocityEngine - Loaded System Directive: org.apache.velocity.runtime.directive.Stop 06:26:53.351 [main] DEBUG VelocityEngine - Loaded System Directive: org.apache.velocity.runtime.directive.Define 06:26:53.354 [main] DEBUG VelocityEngine - Loaded System Directive: org.apache.velocity.runtime.directive.Break 06:26:53.357 [main] DEBUG VelocityEngine - Loaded System Directive: org.apache.velocity.runtime.directive.Evaluate 06:26:53.360 [main] DEBUG VelocityEngine - Loaded System Directive: org.apache.velocity.runtime.directive.Macro 06:26:53.366 [main] DEBUG VelocityEngine - Loaded System Directive: org.apache.velocity.runtime.directive.Parse 06:26:53.370 [main] DEBUG VelocityEngine - Loaded System Directive: org.apache.velocity.runtime.directive.Include 06:26:53.374 [main] DEBUG VelocityEngine - Loaded System Directive: org.apache.velocity.runtime.directive.Foreach 06:26:53.422 [main] DEBUG VelocityEngine.parser - Created '20' parsers. 06:26:53.461 [main] DEBUG VelocityEngine.macro - "velocimacro.library.path" is not set. Trying default library: velocimacros.vtl 06:26:53.463 [main] DEBUG VelocityEngine.loader.class - Could not load resource 'velocimacros.vtl' from ResourceLoader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader 06:26:53.465 [main] DEBUG VelocityEngine.macro - Default library velocimacros.vtl not found. Trying old default library: VM_global_library.vm 06:26:53.467 [main] DEBUG VelocityEngine.loader.class - Could not load resource 'VM_global_library.vm' from ResourceLoader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader 06:26:53.468 [main] DEBUG VelocityEngine.macro - Old default library VM_global_library.vm not found. 06:26:53.469 [main] DEBUG VelocityEngine.macro - allowInline = true: VMs can be defined inline in templates 06:26:53.470 [main] DEBUG VelocityEngine.macro - allowInlineToOverride = false: VMs defined inline may NOT replace previous VM definitions 06:26:53.471 [main] DEBUG VelocityEngine.macro - allowInlineLocal = false: VMs defined inline will be global in scope if allowed. 06:26:53.472 [main] DEBUG VelocityEngine.macro - autoload off: VM system will not automatically reload global library macros 06:26:53.528 [main] DEBUG VelocityEngine.loader - ResourceManager: found velocity/reflection.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader 06:26:53.531 [main] ERROR VelocityEngine.rendering - Variable $context has not been set at velocity/reflection.vm[line 9, column 19] 06:26:53.538 [main] ERROR d.h.etiketten.VelocityTemplateEngine - something invoked in the template threw an exception org.apache.velocity.exception.MethodInvocationException: Variable $context has not been set at velocity/reflection.vm[line 9, column 19] at org.apache.velocity.runtime.parser.node.ASTReference.getRootVariableValue(ASTReference.java:1160) at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:309) at org.apache.velocity.runtime.parser.node.ASTReference.value(ASTReference.java:704) at org.apache.velocity.runtime.directive.Foreach.render(Foreach.java:237) at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:304) at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:439) at org.apache.velocity.Template.merge(Template.java:358) at org.apache.velocity.Template.merge(Template.java:262) Then I tried to include some more explicit configuration, to enable these tools or tool scopes (I am not sure which): - VelocityContext context = new VelocityContext(); + VelocityEngine ve = new VelocityEngine(); + EasyFactoryConfiguration config = new EasyFactoryConfiguration(); + config.toolbox(Scope.REQUEST).property("locale", Locale.GERMAN) + .tool(DateTool.class); + config.toolbox(Scope.APPLICATION) + .tool(NumberTool.class).property("locale", Locale.GERMAN); + + ToolManager manager = new ToolManager(true, true); + manager.configure(config); + manager.setVelocityEngine(ve); + logger.debug("hasApplicationTools: {}", manager.hasApplicationTools()); + logger.debug("hasRequestTools: {}", manager.hasRequestTools()); + Context context = manager.createContext(); This makes hasApplicationTools() and hasRequestTools() return true, but still in the template, there is no $context or $esc or $display available. 06:30:28.071 [main] DEBUG o.apache.velocity.tools.ToolManager - VelocityEngine instance was changed to org.apache.velocity.app.VelocityEngine@6b67034 06:30:28.072 [main] DEBUG d.h.etiketten.VelocityTemplateEngine - hasApplicationTools: true 06:30:28.074 [main] DEBUG d.h.etiketten.VelocityTemplateEngine - hasRequestTools: true 06:30:28.082 [main] DEBUG org.apache.velocity - Initializing Velocity, Calling init()... 06:30:28.083 [main] DEBUG org.apache.velocity - Starting Apache Velocity v2.3 06:30:28.089 [main] DEBUG org.apache.velocity - Default Properties resource: org/apache/velocity/runtime/defaults/velocity.properties 06:30:28.111 [main] DEBUG VelocityEngine - ResourceLoader instantiated: org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader 06:30:28.117 [main] DEBUG VelocityEngine - initialized (class org.apache.velocity.runtime.resource.ResourceCacheImpl) with class java.util.Collections$SynchronizedMap cache map. 06:30:28.123 [main] DEBUG VelocityEngine - Loaded System Directive: org.apache.velocity.runtime.directive.Stop 06:30:28.128 [main] DEBUG VelocityEngine - Loaded System Directive: org.apache.velocity.runtime.directive.Define 06:30:28.131 [main] DEBUG VelocityEngine - Loaded System Directive: org.apache.velocity.runtime.directive.Break 06:30:28.135 [main] DEBUG VelocityEngine - Loaded System Directive: org.apache.velocity.runtime.directive.Evaluate 06:30:28.138 [main] DEBUG VelocityEngine - Loaded System Directive: org.apache.velocity.runtime.directive.Macro 06:30:28.145 [main] DEBUG VelocityEngine - Loaded System Directive: org.apache.velocity.runtime.directive.Parse 06:30:28.150 [main] DEBUG VelocityEngine - Loaded System Directive: org.apache.velocity.runtime.directive.Include 06:30:28.154 [main] DEBUG VelocityEngine - Loaded System Directive: org.apache.velocity.runtime.directive.Foreach 06:30:28.208 [main] DEBUG VelocityEngine.parser - Created '20' parsers. 06:30:28.264 [main] DEBUG VelocityEngine.macro - "velocimacro.library.path" is not set. Trying default library: velocimacros.vtl 06:30:28.267 [main] DEBUG VelocityEngine.loader.class - Could not load resource 'velocimacros.vtl' from ResourceLoader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader 06:30:28.268 [main] DEBUG VelocityEngine.macro - Default library velocimacros.vtl not found. Trying old default library: VM_global_library.vm 06:30:28.272 [main] DEBUG VelocityEngine.loader.class - Could not load resource 'VM_global_library.vm' from ResourceLoader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader 06:30:28.273 [main] DEBUG VelocityEngine.macro - Old default library VM_global_library.vm not found. 06:30:28.274 [main] DEBUG VelocityEngine.macro - allowInline = true: VMs can be defined inline in templates 06:30:28.275 [main] DEBUG VelocityEngine.macro - allowInlineToOverride = false: VMs defined inline may NOT replace previous VM definitions 06:30:28.276 [main] DEBUG VelocityEngine.macro - allowInlineLocal = false: VMs defined inline will be global in scope if allowed. 06:30:28.277 [main] DEBUG VelocityEngine.macro - autoload off: VM system will not automatically reload global library macros 06:30:28.336 [main] DEBUG VelocityEngine.loader - ResourceManager: found velocity/reflection.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader 06:30:28.339 [main] ERROR VelocityEngine.rendering - Variable $context has not been set at velocity/reflection.vm[line 9, column 19] 06:30:28.346 [main] ERROR d.h.etiketten.VelocityTemplateEngine - something invoked in the template threw an exception org.apache.velocity.exception.MethodInvocationException: Variable $context has not been set at velocity/reflection.vm[line 9, column 19] at org.apache.velocity.runtime.parser.node.ASTReference.getRootVariableValue(ASTReference.java:1160) at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:309) at org.apache.velocity.runtime.parser.node.ASTReference.value(ASTReference.java:704) at org.apache.velocity.runtime.directive.Foreach.render(Foreach.java:237) at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:304) at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:439) at org.apache.velocity.Template.merge(Template.java:358) at org.apache.velocity.Template.merge(Template.java:262) The lib versions are implementation ('org.apache.velocity:velocity-engine-core:2.3') implementation ('org.apache.velocity.tools:velocity-tools-generic:3.1') I have no more ideas now. Maybe somebody can point me out what is going on here and how ToolManager is meant to be used? - If I may mention that: The code listings on page https://velocity.apache.org/tools/3.1/generic.html have not helped me much: A Map is initialised, but never used. Arguments are passed, but not defined. Thank you very much for any advice. Stefan JETZT NEWSLETTER ABONNIEREN: https://hammerbacher.com/newsletter-anmeldung/ Hammerbacher GmbH Geschäftsführer Bernhard Hammerbacher, Ursula Hammerbacher Registergericht Nürnberg HRB 10908 Hausanschrift Daimlerstraße 4-6 D 92318 Neumarkt Telefon +49(0)9181 2592-0 Telefax +49(0)9181 2592-28 E-Mail i...@hammerbachergmbh.de www.hammerbacher.com Haftungsausschluss / Disclaimer Die Informationen, die in dieser Kommunikation enthalten sind, sind ausschließlich und allein für den Empfänger bestimmt. Die Verwendung durch Dritte ist untersagt. Die Firma Hammerbacher GmbH ist nur für die von ihr eingegeben Informationen verantwortlich, jedoch nicht für die einwandfreie Übertragung oder im Zusammenhang mit der Übertragung oder dem Empfang eingetretene Veränderungen oder Verzögerungen. Diese E-Mail enthält vetrtrauliche und/oder rechtlich geschützte Informationen. Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie diese E-Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser Mail ist nicht gestattet.