ScriptEval
The Do It All Swiss Army Knife Valve
Introduction
Valve for evaluating scripts using the Java Scripting API (javax.script) and GraalJS/GraalVM.
Type of script supported (JavaScript/ECMA, Python, Ruby etc) is depending on the script engine used. By default this valve (and the examples) uses the graal.js
engine with support for JavaScript.
For more information, see:
Configuration
engine
The script engine to use.
"graal.js"
source
The script to evaluate (Mandatory unless config.path is configured)
path
Path to script to evaluate.
Context
During script evaluation the following objects are available in the script context:
flow
The current Flow
(Type: fortified.pipes.api.Flow
)
log
The current valve logger
(Type: fortified.platform.logging.Logger
)
request
The current request (JS)
state
The current Flow state
(Type: java.util.Map<String, Object>
)
session
The current Session
(Type: fortified.pipes.api.Session
)
Examples
Request parameters
Pipe request parameters are accessed using the request
object in script context:
var msg = request.get('message');
console.log('Message: ' + msg);
Flow state
Flow state can be accessed using the flow
or the state
script context object
// Update state
flow.state().put('name01','value01');
state.put('name02', 1234);
// Read state
var name01 = flow.state().get('name01');
var name02 = state.get('name02');
Logging
Logging in scripts can be done using the standard console object:
console.log('log'); // Same as 'console.debug'
console.trace('trace')
console.debug('debug');
console.info('info');
console.warn('warn');
console.error('error');
or using the Fortified Logging API Logger object available in script context:
log.trace('trace');
log.debug('debug');
log.info('info');
log.warn('warn');
log.error('error');
Troubleshooting
Syntax error
Bad script syntax result in a syntax error in the log (WARN
) and a flow failure.
A syntax error typically looks like this and contains a location, description and the bad line:
SyntaxError: <eval>:43:24 Missing close quote
print('Hello, World!'');
^
Advanced
Java types
To access java types in script use:
var FileClass = Java.type("java.io.File");
or (backwards-compatible syntax):
var FileClass = java.io.File;
var file = new FileClass("myFile.md");
For more information regarding script interoperability with java, see: https://www.graalvm.org/reference-manual/js/JavaInteroperability/
Engine configuration
Script engine log can be configured using the following system property:
-Dpolyglot.log.file=<path>
Last updated