How do I call a specific function of a script?

This code demonstrate the use of Invocable interface to invoke a specific function of a script. The Invocable.invokeFunction() takes the function name with or without a parameter as the function’s parameter. The parameter value can be passed as a varargs.

package org.kodejava.example.script;

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
import javax.script.Invocable;

public class InvokingFunction {
    public static void main(String[] args) {
        String script =
            "function sayHello() {" +
            "   sayHello(null);" +
            "}" +
            " " +
            "function sayHello(name) {" +
            "   println('Hi there' + " +
            "       ((name == null) ? '!' : ' ' + name + '!'));" +
            "}";

        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByExtension("js");

        try {
            engine.eval(script);

            //
            // Convert / cast the engine into invocable engine.
            //
            Invocable invocableEngine = (Invocable) engine;

            //
            // Invoking sayHello function without parameter.
            //
            invocableEngine.invokeFunction("sayHello");

            //
            // Invoking sayHello function with a parameter.
            //
            invocableEngine.invokeFunction("sayHello", "Jude");
        } catch (ScriptException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    }
}

Wayan Saryada

Programmer, runner, recreational diver, currently living in the island of Bali, Indonesia. Mostly programming in Java, creating web based application with Spring Framework, Hibernate / JPA.

Leave a Reply