public Object evalScript()

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