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:

https://www.graalvm.org/

Configuration

Valve name: ScriptEval

NameDescriptionDefault valueMandatoryExpanded

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:

NameDescription

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)

Request, state and session is also available through Flow

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