An Object can be set in the context of the Velocity Template. That Object can then be called from the template using it's name.
Lets assume that we want the template to call the hello method from the VelocityJavaMethodExample Object.
public class VelocityJavaMethodExample { public String hello( String input ){ return "Hello " + input; } }
import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.VelocityEngine; public class VelocityJavaMethodRun { public static void main(String[] argv){ // Source directory String sourceDirectory = "V:/tmp/velocity/"; // Create the velocity engine VelocityEngine ve = new VelocityEngine(); ve.setProperty( "resource.loader", "file"); ve.setProperty( "file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.FileResourceLoader"); ve.setProperty( "file.resource.loader.path", sourceDirectory); ve.setProperty( "file.resource.loader.cache", true); ve.setProperty( "file.resource.loader.modificationCheckInterval", "2"); ve.init(); // Get the template Template t = ve.getTemplate( "example3.vm" ); // Create the Context VelocityContext context = new VelocityContext(); context.put("MyVariable", new VelocityJavaMethodExample() ); try { // Create the output file Writer out = new BufferedWriter(new OutputStreamWriter( new FileOutputStream( new File( sourceDirectory + "example3.txt" ) ), "UTF8") ); t.merge( context, out); out.close(); } catch ( Exception e ){ e.printStackTrace(); } } }
This is a test
Call java method: $MyVariable.hello( $input )
This is a test Call java method: Hello World