script
Invoke specific script function
This is an example of how to invoke a specific script function. We are using the ScriptEngine interface that provides methods for the basic scripting functionality. Invoking a script function with Java implies that you should:
- Create a new ScriptEngineManager. The ScriptEngineManager implements a discovery and instantiation mechanism for ScriptEngine classes and also maintains a collection of key/value pairs storing state shared by all engines created by the Manager.
- Use the
getEngineByExtension(String extension)
API method to look up and create a ScriptEngine for the js extension. - Create a String script that describes a function. In this example, we have created
sayHi(name)
function that prints a message and the name parameter ans another function,sayHi()
, that invokessayHi(name)
function with a null parameter. - Use the
eval(String script)
method to execute the script. - Cast the engine to an Invocable engine, that is an interface implemented by ScriptEngines whose methods allow the invocation of procedures in scripts that have previously been executed
- Use
invokeFunction(String name, Object... args)
method to call the functions defined in the script.
Let’s take a look at the code snippet that follows:
package com.javacodegeeks.snippets.core; import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; import javax.script.ScriptException; import javax.script.Invocable; public class InvokingFunctionExample { public static void main(String[] args) { String script = "function sayHi() {" + " sayHi(null);" + "}" + " " + "function sayHi(name) {" + " println('Hi' + " + " ((name == null) ? ' JavaCodeGeeks Felow!' : ' ' + name + '!'));" + "}"; ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByExtension("js"); try { engine.eval(script); //cast the engine to Invocable engine. Invocable invocableEngine = (Invocable) engine; // Invoke sayHi function without parameter. invocableEngine.invokeFunction("sayHi"); // Invoke sayHi function with parameter. invocableEngine.invokeFunction("sayHi", "username"); } catch (ScriptException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } } }
Output:
Hi JavaCodeGeeks Felow!
Hi username!
This was an example of how to invoke a specific script function in Java.