in src/main/java/org/apache/sling/hc/support/impl/ScriptedHealthCheck.java [268:309]
public Object evalScript(BundleContext bundleContext, ScriptEngine scriptEngine, String scriptToExecute, FormattingResultLog log, Map<String,Object> additionalBindings, boolean logScriptResult) throws ScriptException, IOException {
final Bindings bindings = new SimpleBindings();
final ScriptHelperBinding scriptHelper = new ScriptHelperBinding(bundleContext);
StringWriter stdout = new StringWriter();
StringWriter stderr = new StringWriter();
bindings.put("scriptHelper", scriptHelper);
bindings.put("osgi", scriptHelper); // also register script helper like in web console script console
bindings.put("log", log);
bindings.put("bundleContext", bundleContext);
if (additionalBindings != null) {
for (Map.Entry<String, Object> additionalBinding : additionalBindings.entrySet()) {
bindings.put(additionalBinding.getKey(), additionalBinding.getValue());
}
}
SimpleScriptContext scriptContext = new SimpleScriptContext();
scriptContext.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
scriptContext.setWriter(stdout);
scriptContext.setErrorWriter(stderr);
try {
log.debug(scriptToExecute);
Object scriptResult = scriptEngine.eval(scriptToExecute, scriptContext);
appendStreamsToResult(log, stdout, stderr, scriptContext);
if(scriptResult instanceof Result) {
Result result = (Result) scriptResult;
for(ResultLog.Entry entry: result) {
log.add(entry);
}
} else if(scriptResult != null && logScriptResult){
log.info("Script result: {}", scriptResult);
}
return scriptResult;
} finally {
scriptHelper.ungetServices();
}
}