in src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/JavaUseProvider.java [86:150]
public ProviderOutcome provide(String identifier, RenderContext renderContext, Bindings arguments) {
if (!Patterns.JAVA_CLASS_NAME.matcher(identifier).matches()) {
LOG.debug("Identifier {} does not match a Java class name pattern.", identifier);
return ProviderOutcome.failure();
}
Bindings globalBindings = renderContext.getBindings();
SlingHttpServletRequest request = BindingsUtils.getRequest(globalBindings);
Map<String, Object> overrides = setRequestAttributes(request, arguments);
try {
Exception failure = null;
ClassLoader unitClassLoader = bundledUnitManager.getBundledRenderUnitClassloader(globalBindings);
if (unitClassLoader != null) {
try {
String className = identifier;
if (className.indexOf('.') < 0) {
// the class name is not fully qualified; need to prepend the package name of the current
// rendering unit
RenderUnit renderUnit = bundledUnitManager.getRenderUnit(globalBindings);
if (renderUnit != null) {
className = renderUnit.getClass().getPackage().getName() + "." + className;
}
}
Class<?> clazz = unitClassLoader.loadClass(className);
return loadObject(
clazz,
cls -> bundledUnitManager.getServiceForBundledRenderUnit(globalBindings, clazz),
globalBindings,
arguments);
} catch (Exception e) {
// maybe the class will actually come from the repository
failure = e;
}
}
if (slingHTLMasterCompiler != null) {
Object result = slingHTLMasterCompiler.getResourceBackedUseObject(renderContext, identifier);
if (result != null) {
if (result instanceof Use) {
((Use) result).init(BindingsUtils.merge(globalBindings, arguments));
}
return ProviderOutcome.success(result);
} else {
SlingScriptHelper slingScriptHelper = BindingsUtils.getHelper(globalBindings);
if (slingScriptHelper != null) {
try {
Class<?> clazz =
slingHTLMasterCompiler.getClassLoader().loadClass(identifier);
return loadObject(clazz, slingScriptHelper::getService, globalBindings, arguments);
} catch (Exception e) {
failure = e;
}
}
}
}
if (failure != null) {
return ProviderOutcome.failure(failure);
}
return ProviderOutcome.failure();
} catch (Exception e) {
// any other exception is an error
return ProviderOutcome.failure(e);
} finally {
resetRequestAttribute(request, overrides);
}
}