You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2019/11/08 17:43:23 UTC
[sling-org-apache-sling-scripting-core] 01/01: SLING-8737 - Add
support for lazily-evaluated bindings
This is an automated email from the ASF dual-hosted git repository.
radu pushed a commit to branch issue/SLING-8737
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-core.git
commit 47888402fc658f278f5ccfff4f32da318766c30b
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Fri Nov 8 18:41:40 2019 +0100
SLING-8737 - Add support for lazily-evaluated bindings
* switched to the LazyBindings implementation
* needs several releases for the IT to pass, since the servlets.resolver and resourceresolver
also depend on the api module
---
pom.xml | 4 ++--
.../scripting/core/impl/DefaultSlingScript.java | 6 +++---
.../core/impl/helper/ProtectedBindings.java | 4 +++-
.../sling/scripting/core/it/HtmlScriptingIT.java | 18 ++++++++++++++++--
.../core/it/ScriptingCoreTestSupport.java | 22 +++++++++++++++-------
5 files changed, 39 insertions(+), 15 deletions(-)
diff --git a/pom.xml b/pom.xml
index a8b5e70..756d3ba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@
</parent>
<artifactId>org.apache.sling.scripting.core</artifactId>
- <version>2.0.61-SNAPSHOT</version>
+ <version>2.1.0-SNAPSHOT</version>
<name>Apache Sling Scripting Core</name>
<description>
@@ -113,7 +113,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.api</artifactId>
- <version>2.16.0</version>
+ <version>2.21.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
diff --git a/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java b/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java
index d6f5f2c..519080d 100644
--- a/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java
+++ b/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java
@@ -53,7 +53,6 @@ import javax.script.Invocable;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
-import javax.script.SimpleBindings;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
@@ -69,6 +68,7 @@ import org.apache.sling.api.resource.ResourceMetadata;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceWrapper;
import org.apache.sling.api.resource.SyntheticResource;
+import org.apache.sling.api.scripting.LazyBindings;
import org.apache.sling.api.scripting.ScriptEvaluationException;
import org.apache.sling.api.scripting.SlingBindings;
import org.apache.sling.api.scripting.SlingScript;
@@ -209,7 +209,7 @@ class DefaultSlingScript implements SlingScript, Servlet, ServletConfig {
private Writer writer = (Writer) b.get(OUT);
private Writer errorWriter = new LogWriter((Logger) b.get(LOG));
private Reader reader = (Reader)b.get(READER);
- private Bindings slingScope = new SimpleBindings();
+ private Bindings slingScope = new LazyBindings();
/**
@@ -631,7 +631,7 @@ class DefaultSlingScript implements SlingScript, Servlet, ServletConfig {
Bindings verifySlingBindings(final SlingBindings slingBindings) throws IOException {
- final Bindings bindings = new SimpleBindings();
+ final Bindings bindings = new LazyBindings();
final SlingHttpServletRequest request = slingBindings.getRequest();
diff --git a/src/main/java/org/apache/sling/scripting/core/impl/helper/ProtectedBindings.java b/src/main/java/org/apache/sling/scripting/core/impl/helper/ProtectedBindings.java
index a789a68..f0b7c82 100644
--- a/src/main/java/org/apache/sling/scripting/core/impl/helper/ProtectedBindings.java
+++ b/src/main/java/org/apache/sling/scripting/core/impl/helper/ProtectedBindings.java
@@ -25,7 +25,9 @@ import java.util.Set;
import javax.script.Bindings;
-public class ProtectedBindings implements Bindings {
+import org.apache.sling.api.scripting.LazyBindings;
+
+public class ProtectedBindings extends LazyBindings implements Bindings {
private final Bindings wrapped;
private final Set<String> protectedKeys;
diff --git a/src/test/java/org/apache/sling/scripting/core/it/HtmlScriptingIT.java b/src/test/java/org/apache/sling/scripting/core/it/HtmlScriptingIT.java
index 9714fb2..6629fa9 100644
--- a/src/test/java/org/apache/sling/scripting/core/it/HtmlScriptingIT.java
+++ b/src/test/java/org/apache/sling/scripting/core/it/HtmlScriptingIT.java
@@ -28,6 +28,7 @@ import org.apache.sling.api.servlets.ServletResolver;
import org.apache.sling.resource.presence.ResourcePresence;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ops4j.pax.exam.Configuration;
@@ -43,11 +44,17 @@ import org.osgi.service.http.HttpService;
import static org.apache.sling.testing.paxexam.SlingOptions.slingQuickstartOakTar;
import static org.apache.sling.testing.paxexam.SlingOptions.slingScriptingSightly;
import static org.apache.sling.testing.paxexam.SlingOptions.slingScriptingThymeleaf;
+import static org.apache.sling.testing.paxexam.SlingOptions.versionResolver;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
+import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
import static org.ops4j.pax.exam.CoreOptions.options;
import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.factoryConfiguration;
+@Ignore(
+ value = "The test would pass only if org.apache.sling.resourceresolver and org.apache.sling.servlets.resolver would be built " +
+ "locally against org.apache.sling.api:2.21.0-SNAPSHOT"
+)
@RunWith(PaxExam.class)
@ExamReactorStrategy(PerClass.class)
public class HtmlScriptingIT extends ScriptingCoreTestSupport {
@@ -83,6 +90,11 @@ public class HtmlScriptingIT extends ScriptingCoreTestSupport {
@Filter(value = "(path=/content/scripting)")
private ResourcePresence scripting;
+ private Option slingResourceResolver =
+ mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.resourceresolver").version(versionResolver);
+ private Option slingServletsResolver =
+ mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.servlets.resolver").version(versionResolver);
+
@Configuration
public Option[] configuration() {
final String workingDirectory = workingDirectory();
@@ -99,8 +111,10 @@ public class HtmlScriptingIT extends ScriptingCoreTestSupport {
.asOption(),
factoryConfiguration("org.apache.sling.resource.presence.internal.ResourcePresenter")
.put("path", "/content/scripting")
- .asOption()
- ), scriptingCore);
+ .asOption(),
+ mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.resourceresolver").version("1.6.15-SNAPSHOT"),
+ mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.servlets.resolver").version("2.5.7-SNAPSHOT")
+ ), scriptingCore, slingApi, slingResourceResolver, slingServletsResolver);
}
@ProbeBuilder
diff --git a/src/test/java/org/apache/sling/scripting/core/it/ScriptingCoreTestSupport.java b/src/test/java/org/apache/sling/scripting/core/it/ScriptingCoreTestSupport.java
index d65d977..975d68c 100644
--- a/src/test/java/org/apache/sling/scripting/core/it/ScriptingCoreTestSupport.java
+++ b/src/test/java/org/apache/sling/scripting/core/it/ScriptingCoreTestSupport.java
@@ -40,14 +40,20 @@ public class ScriptingCoreTestSupport extends TestSupport {
final int httpPort = findFreePort();
- final Option scriptingCore = mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.core").version(versionResolver.getVersion("org.apache.sling", "org.apache.sling.scripting.core"));
+ final Option scriptingCore = mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.core").version(versionResolver);
+ final Option slingApi = mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.api").version(versionResolver);
+ final Option osgiConverter = mavenBundle().groupId("org.osgi").artifactId("org.osgi.util.converter").version("1.0.0");
+
+
public ModifiableCompositeOption baseConfiguration() {
final Option slingScripting = slingScripting().remove(scriptingCore);
return composite(
super.baseConfiguration(),
// Sling Scripting
- slingScripting,
+ composite(remove(new Option[] {slingScripting}, slingApi)),
+ mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.api").versionAsInProject(),
+ osgiConverter,
newConfiguration("org.apache.felix.http")
.put("org.osgi.service.http.port", httpPort)
.asOption(),
@@ -82,12 +88,14 @@ public class ScriptingCoreTestSupport extends TestSupport {
return expanded;
}
- static Option[] remove(final Option[] options, final Option option) {
+ static Option[] remove(final Option[] options, final Option ... toRemove) {
final List<Option> expanded = expand(options);
- if (option instanceof CompositeOption) {
- expanded.removeAll(Arrays.asList(((CompositeOption) option).getOptions()));
- } else {
- expanded.removeAll(Collections.singleton(option));
+ for (Option toRemoveOption : toRemove) {
+ if (toRemoveOption instanceof CompositeOption) {
+ expanded.removeAll(Arrays.asList(((CompositeOption) toRemoveOption).getOptions()));
+ } else {
+ expanded.removeAll(Collections.singleton(toRemoveOption));
+ }
}
return expanded.toArray(new Option[0]);
}