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:
01 02 03 04 05 06 07 08 09 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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | 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.