in src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/ScriptUseProvider.java [108:146]
public ProviderOutcome provide(String scriptName, RenderContext renderContext, Bindings arguments) {
Bindings globalBindings = renderContext.getBindings();
Bindings bindings = BindingsUtils.merge(globalBindings, arguments);
String extension = scriptExtension(scriptName);
if (extension == null || extension.equals(SightlyScriptEngineFactory.EXTENSION)) {
return ProviderOutcome.failure();
}
URL script = bundledUnitManager.getScript(bindings, scriptName);
if (script != null) {
String scriptUrlAsString = script.toExternalForm();
bindings.remove(BundledRenderUnit.VARIABLE);
bindings.put(ScriptEngine.FILENAME, scriptUrlAsString);
ScriptEngineManager scriptEngineManager = getScriptEngineManager();
if (scriptEngineManager == null) {
return ProviderOutcome.failure(new SightlyException("Failed to obtain a ScriptEngineManager."));
}
ScriptEngine scriptEngine = scriptEngineManager.getEngineByExtension(extension);
if (scriptEngine != null) {
try (ScriptNameAwareReader reader = new ScriptNameAwareReader(
new InputStreamReader(script.openStream(), StandardCharsets.UTF_8), scriptUrlAsString)) {
if (scriptEngine instanceof Compilable) {
Compilable compilableScriptEngine = (Compilable) scriptEngine;
CompiledScript compiledScript = compilableScriptEngine.compile(reader);
return ProviderOutcome.notNullOrFailure(compiledScript.eval(bindings));
} else {
return ProviderOutcome.notNullOrFailure(scriptEngine.eval(reader, bindings));
}
} catch (Exception e) {
return ProviderOutcome.failure(e);
}
}
}
Resource scriptResource = scriptDependencyResolver.resolveScript(renderContext, scriptName);
if (scriptResource == null) {
log.debug("Path does not match an existing resource: {}", scriptName);
return ProviderOutcome.failure();
}
return evalScript(scriptResource, bindings);
}