Skip to content

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 execution
  • Compilable - Script pre-compilation
  • Invocable - 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"));  // 30

Invocable 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());
}