JSR-223 Interface
FSScript implements the Java standard JSR-223 (javax.script) interface, allowing integration with any framework supporting this standard.
Basic Usage
java
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("fsscript");
engine.put("name", "World");
engine.eval("export let greeting = `Hello ${name}!`;");
System.out.println(engine.get("greeting")); // Hello World!Supported Interfaces
FSScript's ScriptEngine implements the following interfaces:
ScriptEngine- Basic script executionCompilable- Script pre-compilationInvocable- Function invocation
Compilable Interface
java
Compilable compilable = (Compilable) engine;
CompiledScript compiled = compilable.compile("export let sum = a + b;");
Bindings bindings = engine.createBindings();
bindings.put("a", 10);
bindings.put("b", 20);
compiled.eval(bindings);
System.out.println(bindings.get("sum")); // 30Invocable Interface
java
engine.eval("""
function greet(name) {
return 'Hello, ' + name + '!';
}
""");
Invocable invocable = (Invocable) engine;
Object result = invocable.invokeFunction("greet", "FSScript");
System.out.println(result); // Hello, FSScript!Bindings Scope
java
// Global scope
Bindings globalBindings = engine.getBindings(ScriptContext.GLOBAL_SCOPE);
globalBindings.put("globalVar", "I'm global");
// Engine scope
Bindings engineBindings = engine.getBindings(ScriptContext.ENGINE_SCOPE);
engineBindings.put("engineVar", "I'm engine-scoped");
// Both accessible in script
engine.eval("export let g = globalVar; export let e = engineVar;");Error Handling
java
try {
engine.eval("invalid syntax {{");
} catch (ScriptException e) {
System.err.println("Script error: " + e.getMessage());
System.err.println("Line: " + e.getLineNumber());
System.err.println("Column: " + e.getColumnNumber());
}