made sure dependencies of a bundled unit are loaded with the correct classloader
diff --git a/pom.xml b/pom.xml
index ec5993b..aa9a022 100644
--- a/pom.xml
+++ b/pom.xml
@@ -182,6 +182,13 @@
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.scripting.resolver</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+
<!-- OSGI -->
<dependency>
<groupId>org.osgi</groupId>
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/SightlyScriptEngine.java b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/SightlyScriptEngine.java
index 8c5e9ed..f757be5 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/SightlyScriptEngine.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/SightlyScriptEngine.java
@@ -30,13 +30,11 @@
import javax.script.ScriptEngineFactory;
import javax.script.ScriptException;
-import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.api.scripting.SlingBindings;
-import org.apache.sling.api.scripting.SlingScriptConstants;
import org.apache.sling.api.scripting.SlingScriptHelper;
import org.apache.sling.scripting.api.AbstractSlingScriptEngine;
import org.apache.sling.scripting.api.ScriptNameAware;
import org.apache.sling.scripting.api.resource.ScriptingResourceResolverProvider;
+import org.apache.sling.scripting.resolver.BundledRenderUnit;
import org.apache.sling.scripting.sightly.SightlyException;
import org.apache.sling.scripting.sightly.compiler.CompilationResult;
import org.apache.sling.scripting.sightly.compiler.CompilationUnit;
@@ -93,8 +91,14 @@
public Object eval(Reader reader, ScriptContext scriptContext) throws ScriptException {
checkArguments(reader, scriptContext);
try {
- Object renderUnit = scriptContext.getAttribute("precompiled.unit", SlingScriptConstants.SLING_SCOPE);
SightlyCompiledScript compiledScript;
+ Bindings bindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
+ Object bundledRenderUnit = bindings.get(BundledRenderUnit.VARIABLE);
+ Object renderUnit = null;
+ if (bundledRenderUnit instanceof BundledRenderUnit) {
+ renderUnit = ((BundledRenderUnit) bundledRenderUnit).getUnit();
+ }
+
if (renderUnit instanceof RenderUnit) {
compiledScript = new SightlyCompiledScript(this, (RenderUnit) renderUnit);
} else {
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/JavaUseProvider.java b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/JavaUseProvider.java
index c0f65ee..8f5aa76 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/JavaUseProvider.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/JavaUseProvider.java
@@ -20,7 +20,7 @@
import java.util.HashMap;
import java.util.Map;
-import java.util.regex.Pattern;
+
import javax.script.Bindings;
import javax.servlet.ServletRequest;
@@ -29,6 +29,7 @@
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.scripting.SlingScriptHelper;
import org.apache.sling.commons.classloader.ClassLoaderWriter;
+import org.apache.sling.scripting.resolver.BundledRenderUnit;
import org.apache.sling.scripting.sightly.impl.engine.SightlyJavaCompilerService;
import org.apache.sling.scripting.sightly.impl.utils.BindingsUtils;
import org.apache.sling.scripting.sightly.impl.utils.Patterns;
@@ -37,6 +38,7 @@
import org.apache.sling.scripting.sightly.use.ProviderOutcome;
import org.apache.sling.scripting.sightly.use.UseProvider;
import org.osgi.framework.Constants;
+import org.osgi.framework.wiring.BundleWiring;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.metatype.annotations.AttributeDefinition;
@@ -93,18 +95,27 @@
return ProviderOutcome.success(result);
} else {
LOG.debug("Attempting to load class {} from the classloader cache.", identifier);
- ClassLoader classLoader = (ClassLoader) renderContext.getBindings().get("org.apache.sling.scripting.sightly.render_unit.loader");
- if (classLoader == null) {
+ BundledRenderUnit bundledRenderUnit = null;
+ ClassLoader classLoader;
+ Object bru = globalBindings.get(BundledRenderUnit.VARIABLE);
+ if (bru instanceof BundledRenderUnit) {
+ bundledRenderUnit = (BundledRenderUnit) bru;
+ classLoader = bundledRenderUnit.getBundle().adapt(BundleWiring.class).getClassLoader();
+ } else {
classLoader = classLoaderWriter.getClassLoader();
}
Class<?> cls = classLoader.loadClass(identifier);
// attempt OSGi service load
- result = sling.getService(cls);
+ if (bundledRenderUnit != null) {
+ result = bundledRenderUnit.getService(identifier);
+ } else {
+ result = sling.getService(cls);
+ }
if (result != null) {
return ProviderOutcome.success(result);
}
Object adaptableCandidate = arguments.get(ADAPTABLE);
- if (adaptableCandidate != null && adaptableCandidate instanceof Adaptable) {
+ if (adaptableCandidate instanceof Adaptable) {
Adaptable adaptable = (Adaptable) adaptableCandidate;
result = adaptable.adaptTo(cls);
if (result != null) {