This is an automated email from the ASF dual-hosted git repository.
cziegeler pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-core.git
The following commit(s) were added to refs/heads/master by this push:
new 452d454 SLING-12643 : Support Jakarta ServletAPI in Scripting
452d454 is described below
commit 452d4547c7c0433684a157667ae0f70dab0e54fd
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Fri May 23 07:46:06 2025 +0200
SLING-12643 : Support Jakarta ServletAPI in Scripting
---
pom.xml | 8 +-
.../scripting/core/impl/DefaultSlingScript.java | 550 +++++++++++++++++----
...elper.java => InternalJakartaScriptHelper.java} | 21 +-
.../scripting/core/impl/InternalScriptHelper.java | 1 +
.../core/impl/ScriptingVariablesConsolePlugin.java | 57 +--
.../core/impl/SlingScriptAdapterFactory.java | 9 +-
.../impl/bundled/AbstractBundledRenderUnit.java | 24 +-
.../core/impl/bundled/ScriptContextProvider.java | 55 ++-
.../core/impl/bundled/SlingScriptAdapter.java | 10 +-
.../core/impl/helper/OnDemandReaderRequest.java | 1 +
.../core/impl/helper/OnDemandWriterResponse.java | 1 +
...elperTest.java => JakartaScriptHelperTest.java} | 8 +-
.../sling/scripting/core/ScriptHelperTest.java | 1 +
.../sling/scripting/core/it/HtmlScriptingIT.java | 1 +
14 files changed, 555 insertions(+), 192 deletions(-)
diff --git a/pom.xml b/pom.xml
index ad39458..1ffe2bf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -71,6 +71,12 @@
<version>3.0.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.http.wrappers</artifactId>
+ <version>6.1.0</version>
+ <scope>provided</scope>
+ </dependency>
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.commons.mime</artifactId>
@@ -91,7 +97,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.scripting.spi</artifactId>
- <version>1.0.2</version>
+ <version>2.0.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 18966a5..7a5a3a9 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
@@ -25,11 +25,6 @@ import javax.script.Invocable;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
-import javax.servlet.Servlet;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
@@ -49,10 +44,17 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import org.apache.sling.api.SlingConstants;
+import jakarta.servlet.RequestDispatcher;
+import jakarta.servlet.Servlet;
+import jakarta.servlet.ServletConfig;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
import org.apache.sling.api.SlingException;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.SlingJakartaHttpServletRequest;
+import org.apache.sling.api.SlingJakartaHttpServletResponse;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceMetadata;
import org.apache.sling.api.resource.ResourceResolver;
@@ -61,9 +63,13 @@ 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.SlingJakartaBindings;
+import org.apache.sling.api.scripting.SlingJakartaScript;
+import org.apache.sling.api.scripting.SlingJakartaScriptHelper;
import org.apache.sling.api.scripting.SlingScript;
import org.apache.sling.api.scripting.SlingScriptConstants;
import org.apache.sling.api.scripting.SlingScriptHelper;
+import org.apache.sling.api.wrappers.ScriptingWrapperSupport;
import org.apache.sling.scripting.api.BindingsValuesProvider;
import org.apache.sling.scripting.api.CachedScript;
import org.apache.sling.scripting.api.ScriptCache;
@@ -74,17 +80,18 @@ import org.osgi.framework.BundleContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static org.apache.sling.api.scripting.SlingBindings.FLUSH;
-import static org.apache.sling.api.scripting.SlingBindings.LOG;
-import static org.apache.sling.api.scripting.SlingBindings.OUT;
-import static org.apache.sling.api.scripting.SlingBindings.READER;
-import static org.apache.sling.api.scripting.SlingBindings.REQUEST;
-import static org.apache.sling.api.scripting.SlingBindings.RESOLVER;
-import static org.apache.sling.api.scripting.SlingBindings.RESOURCE;
-import static org.apache.sling.api.scripting.SlingBindings.RESPONSE;
-import static org.apache.sling.api.scripting.SlingBindings.SLING;
+import static org.apache.sling.api.scripting.SlingJakartaBindings.FLUSH;
+import static org.apache.sling.api.scripting.SlingJakartaBindings.LOG;
+import static org.apache.sling.api.scripting.SlingJakartaBindings.OUT;
+import static org.apache.sling.api.scripting.SlingJakartaBindings.READER;
+import static org.apache.sling.api.scripting.SlingJakartaBindings.REQUEST;
+import static org.apache.sling.api.scripting.SlingJakartaBindings.RESOLVER;
+import static org.apache.sling.api.scripting.SlingJakartaBindings.RESOURCE;
+import static org.apache.sling.api.scripting.SlingJakartaBindings.RESPONSE;
+import static org.apache.sling.api.scripting.SlingJakartaBindings.SLING;
-class DefaultSlingScript implements SlingScript, Servlet, ServletConfig {
+@SuppressWarnings("deprecation")
+class DefaultSlingScript implements SlingScript, SlingJakartaScript, Servlet,
ServletConfig {
/** The logger. */
private static final Logger LOGGER =
LoggerFactory.getLogger(DefaultSlingScript.class);
@@ -104,6 +111,10 @@ class DefaultSlingScript implements SlingScript, Servlet,
ServletConfig {
private static final Set<String> PROTECTED_KEYS =
new HashSet<>(Arrays.asList(REQUEST, RESPONSE, READER, SLING,
RESOURCE, RESOLVER, OUT, LOG));
+ private static final Integer[] SCOPES = {
+ SlingScriptConstants.SLING_SCOPE, Integer.valueOf(100),
Integer.valueOf(200)
+ };
+
/** The resource pointing to the script. */
private final Resource scriptResource;
@@ -134,6 +145,8 @@ class DefaultSlingScript implements SlingScript, Servlet,
ServletConfig {
/* The cache for compiled scripts. */
private final ScriptCache scriptCache;
+ private final boolean isJakartaScriptEngine;
+
/**
* Constructor
* @param bundleContext The bundle context
@@ -167,6 +180,7 @@ class DefaultSlingScript implements SlingScript, Servlet,
ServletConfig {
encoding = "UTF-8";
}
this.scriptEncoding = encoding;
+ this.isJakartaScriptEngine = false;
}
// ---------- SlingScript interface
----------------------------------------
@@ -183,24 +197,257 @@ class DefaultSlingScript implements SlingScript,
Servlet, ServletConfig {
return new LazyScriptResource(this.scriptName,
this.scriptResource.getResourceType(), resolver);
}
- /**
- * @see
org.apache.sling.api.scripting.SlingScript#eval(org.apache.sling.api.scripting.SlingBindings)
- * @throws ScriptEvaluationException
- */
- public Object eval(SlingBindings props) {
- return this.call(props, null);
+ @Override
+ public Object eval(final SlingBindings props) {
+ return call(props, null);
}
- // ---------- Servlet interface
--------------------------------------------
- private static final Integer[] SCOPES = {
- SlingScriptConstants.SLING_SCOPE, Integer.valueOf(100),
Integer.valueOf(200)
- };
+ @Override
+ public Object call(final SlingBindings props, final String method, final
Object... args) {
+ if (this.isJakartaScriptEngine) {
+ return this.call(ScriptingWrapperSupport.toJakartaBindings(props),
method, args);
+ }
+ Bindings bindings = null;
+ Reader reader = null;
+ boolean disposeScriptHelper = !props.containsKey(SLING);
+ ResourceResolver oldResolver = null;
+ try {
+ bindings = verifySlingBindings(props);
- /**
- * @see
org.apache.sling.api.scripting.SlingScript#call(org.apache.sling.api.scripting.SlingBindings,
java.lang.String, java.lang.Object[])
- * @throws ScriptEvaluationException
- */
- public Object call(SlingBindings props, String method, Object... args) {
+ // use final variable for inner class!
+ final Bindings b = bindings;
+ // create script context
+ final ScriptContext ctx = new ScriptContext() {
+
+ private Bindings globalScope;
+ private Bindings engineScope = b;
+ 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 LazyBindings();
+
+ @Override
+ public void setBindings(final Bindings bindings, final int
scope) {
+ switch (scope) {
+ case SlingScriptConstants.SLING_SCOPE:
+ this.slingScope = bindings;
+ break;
+ case 100:
+ if (bindings == null) throw new
NullPointerException("Bindings for ENGINE scope is null");
+ this.engineScope = bindings;
+ break;
+ case 200:
+ this.globalScope = bindings;
+ break;
+ default:
+ throw new IllegalArgumentException("Invalid
scope");
+ }
+ }
+
+ @Override
+ public Bindings getBindings(final int scope) {
+ switch (scope) {
+ case SlingScriptConstants.SLING_SCOPE:
+ return slingScope;
+ case 100:
+ return this.engineScope;
+ case 200:
+ return this.globalScope;
+ default:
+ throw new IllegalArgumentException("Invalid
scope");
+ }
+ }
+
+ @Override
+ public void setAttribute(final String name, final Object
value, final int scope) {
+ if (name == null) throw new IllegalArgumentException("Name
is null");
+ final Bindings bindings = getBindings(scope);
+ if (bindings != null) {
+ bindings.put(name, value);
+ }
+ }
+
+ @Override
+ public Object getAttribute(final String name, final int scope)
{
+ if (name == null) throw new IllegalArgumentException("Name
is null");
+ final Bindings bindings = getBindings(scope);
+ if (bindings != null) {
+ return bindings.get(name);
+ }
+ return null;
+ }
+
+ @Override
+ public Object removeAttribute(final String name, final int
scope) {
+ if (name == null) throw new IllegalArgumentException("Name
is null");
+ final Bindings bindings = getBindings(scope);
+ if (bindings != null) {
+ return bindings.remove(name);
+ }
+ return null;
+ }
+
+ @Override
+ public Object getAttribute(String name) {
+ if (name == null) throw new IllegalArgumentException("Name
is null");
+ for (final int scope : SCOPES) {
+ final Bindings bindings = getBindings(scope);
+ if (bindings != null) {
+ final Object o = bindings.get(name);
+ if (o != null) {
+ return o;
+ }
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public int getAttributesScope(String name) {
+ if (name == null) throw new IllegalArgumentException("Name
is null");
+ for (final int scope : SCOPES) {
+ if ((getBindings(scope) != null) &&
(getBindings(scope).containsKey(name))) {
+ return scope;
+ }
+ }
+ return -1;
+ }
+
+ @Override
+ public List<Integer> getScopes() {
+ return Arrays.asList(SCOPES);
+ }
+
+ @Override
+ public Writer getWriter() {
+ return this.writer;
+ }
+
+ @Override
+ public Writer getErrorWriter() {
+ return this.errorWriter;
+ }
+
+ @Override
+ public void setWriter(Writer writer) {
+ this.writer = writer;
+ }
+
+ @Override
+ public void setErrorWriter(Writer writer) {
+ this.errorWriter = writer;
+ }
+
+ @Override
+ public Reader getReader() {
+ return this.reader;
+ }
+
+ @Override
+ public void setReader(Reader reader) {
+ this.reader = reader;
+ }
+ };
+
+ // set the current resource resolver if a request is available
from the bindings
+ if (props.getRequest() != null) {
+ oldResolver = requestResourceResolver.get();
+
requestResourceResolver.set(props.getRequest().getResourceResolver());
+ }
+
+ // set the script resource resolver as an attribute
+ ctx.setAttribute(
+ SlingScriptConstants.ATTR_SCRIPT_RESOURCE_RESOLVER,
+ this.scriptResource.getResourceResolver(),
+ SlingScriptConstants.SLING_SCOPE);
+
+ reader = getScriptReader();
+ if (method != null && !(this.scriptEngine instanceof Invocable)) {
+ reader = getWrapperReader(reader, method, args);
+ }
+
+ // evaluate the script
+ final Object result;
+ if (method == null && this.scriptEngine instanceof Compilable) {
+ CachedScript cachedScript = scriptCache.getScript(scriptName);
+ if (cachedScript == null) {
+ ScriptNameAwareReader snReader = new
ScriptNameAwareReader(reader, scriptName);
+ CompiledScript compiledScript = ((Compilable)
scriptEngine).compile(snReader);
+ cachedScript = new CachedScriptImpl(scriptName,
compiledScript);
+ scriptCache.putScript(cachedScript);
+ LOGGER.debug("Adding {} to the script cache.", scriptName);
+ } else {
+ LOGGER.debug("Script {} was already cached.", scriptName);
+ }
+ result = cachedScript.getCompiledScript().eval(ctx);
+ } else {
+ result = scriptEngine.eval(reader, ctx);
+ }
+
+ // call method - if supplied and script engine supports direct
invocation
+ if (method != null && (this.scriptEngine instanceof Invocable)) {
+ try {
+ ((Invocable) scriptEngine)
+ .invokeFunction(method,
Arrays.asList(args).toArray());
+ } catch (NoSuchMethodException e) {
+ throw new ScriptEvaluationException(
+ this.scriptName, "Method " + method + " not found
in script.", e);
+ }
+ }
+ // optional flush the output channel
+ Object flushObject = bindings.get(FLUSH);
+ if (Boolean.TRUE.equals(flushObject)) {
+ ctx.getWriter().flush();
+ }
+
+ // allways flush the error channel
+ ctx.getErrorWriter().flush();
+
+ return result;
+
+ } catch (IOException ioe) {
+ throw new ScriptEvaluationException(this.scriptName,
ioe.getMessage(), ioe);
+
+ } catch (ScriptEvaluationException see) {
+ throw see;
+ } catch (ScriptException se) {
+ Throwable cause = (se.getCause() == null) ? se : se.getCause();
+ throw new ScriptEvaluationException(this.scriptName,
se.getMessage(), cause);
+
+ } finally {
+ if (props.getRequest() != null) {
+ requestResourceResolver.set(oldResolver);
+ }
+
+ // close the script reader (SLING-380)
+ if (reader != null) {
+ try {
+ reader.close();
+ } catch (IOException ignore) {
+ // don't care
+ }
+ }
+
+ // dispose of the SlingScriptHelper
+ if (bindings != null && disposeScriptHelper) {
+ final InternalScriptHelper helper = (InternalScriptHelper)
bindings.get(SLING);
+ if (helper != null) {
+ helper.cleanup();
+ }
+ }
+ }
+ }
+
+ @Override
+ public Object eval(final SlingJakartaBindings props) {
+ return this.call(props, null);
+ }
+
+ @Override
+ public Object call(final SlingJakartaBindings props, final String method,
final Object... args) {
+ if (!this.isJakartaScriptEngine) {
+ return this.call(ScriptingWrapperSupport.toJavaxBindings(props),
method, args);
+ }
Bindings bindings = null;
Reader reader = null;
boolean disposeScriptHelper = !props.containsKey(SLING);
@@ -220,9 +467,7 @@ class DefaultSlingScript implements SlingScript, Servlet,
ServletConfig {
private Reader reader = (Reader) b.get(READER);
private Bindings slingScope = new LazyBindings();
- /**
- * @see
javax.script.ScriptContext#setBindings(javax.script.Bindings, int)
- */
+ @Override
public void setBindings(final Bindings bindings, final int
scope) {
switch (scope) {
case SlingScriptConstants.SLING_SCOPE:
@@ -240,9 +485,7 @@ class DefaultSlingScript implements SlingScript, Servlet,
ServletConfig {
}
}
- /**
- * @see javax.script.ScriptContext#getBindings(int)
- */
+ @Override
public Bindings getBindings(final int scope) {
switch (scope) {
case SlingScriptConstants.SLING_SCOPE:
@@ -256,9 +499,7 @@ class DefaultSlingScript implements SlingScript, Servlet,
ServletConfig {
}
}
- /**
- * @see
javax.script.ScriptContext#setAttribute(java.lang.String, java.lang.Object, int)
- */
+ @Override
public void setAttribute(final String name, final Object
value, final int scope) {
if (name == null) throw new IllegalArgumentException("Name
is null");
final Bindings bindings = getBindings(scope);
@@ -267,9 +508,7 @@ class DefaultSlingScript implements SlingScript, Servlet,
ServletConfig {
}
}
- /**
- * @see
javax.script.ScriptContext#getAttribute(java.lang.String, int)
- */
+ @Override
public Object getAttribute(final String name, final int scope)
{
if (name == null) throw new IllegalArgumentException("Name
is null");
final Bindings bindings = getBindings(scope);
@@ -279,9 +518,7 @@ class DefaultSlingScript implements SlingScript, Servlet,
ServletConfig {
return null;
}
- /**
- * @see
javax.script.ScriptContext#removeAttribute(java.lang.String, int)
- */
+ @Override
public Object removeAttribute(final String name, final int
scope) {
if (name == null) throw new IllegalArgumentException("Name
is null");
final Bindings bindings = getBindings(scope);
@@ -291,9 +528,7 @@ class DefaultSlingScript implements SlingScript, Servlet,
ServletConfig {
return null;
}
- /**
- * @see
javax.script.ScriptContext#getAttribute(java.lang.String)
- */
+ @Override
public Object getAttribute(String name) {
if (name == null) throw new IllegalArgumentException("Name
is null");
for (final int scope : SCOPES) {
@@ -308,9 +543,7 @@ class DefaultSlingScript implements SlingScript, Servlet,
ServletConfig {
return null;
}
- /**
- * @see
javax.script.ScriptContext#getAttributesScope(java.lang.String)
- */
+ @Override
public int getAttributesScope(String name) {
if (name == null) throw new IllegalArgumentException("Name
is null");
for (final int scope : SCOPES) {
@@ -321,51 +554,37 @@ class DefaultSlingScript implements SlingScript, Servlet,
ServletConfig {
return -1;
}
- /**
- * @see javax.script.ScriptContext#getScopes()
- */
+ @Override
public List<Integer> getScopes() {
return Arrays.asList(SCOPES);
}
- /**
- * @see javax.script.ScriptContext#getWriter()
- */
+ @Override
public Writer getWriter() {
return this.writer;
}
- /**
- * @see javax.script.ScriptContext#getErrorWriter()
- */
+ @Override
public Writer getErrorWriter() {
return this.errorWriter;
}
- /**
- * @see javax.script.ScriptContext#setWriter(java.io.Writer)
- */
+ @Override
public void setWriter(Writer writer) {
this.writer = writer;
}
- /**
- * @see
javax.script.ScriptContext#setErrorWriter(java.io.Writer)
- */
+ @Override
public void setErrorWriter(Writer writer) {
this.errorWriter = writer;
}
- /**
- * @see javax.script.ScriptContext#getReader()
- */
+ @Override
public Reader getReader() {
return this.reader;
}
- /**
- * @see javax.script.ScriptContext#setReader(java.io.Reader)
- */
+ @Override
public void setReader(Reader reader) {
this.reader = reader;
}
@@ -460,10 +679,10 @@ class DefaultSlingScript implements SlingScript, Servlet,
ServletConfig {
}
}
- /**
- * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
- */
- public void init(ServletConfig servletConfig) {
+ // ---------- Servlet interface
--------------------------------------------
+
+ @Override
+ public void init(final ServletConfig servletConfig) {
if (servletConfig != null) {
final Dictionary<String, String> params = new Hashtable<>(); //
NOSONAR
for (Enumeration<?> ne = servletConfig.getInitParameterNames();
ne.hasMoreElements(); ) {
@@ -476,20 +695,18 @@ class DefaultSlingScript implements SlingScript, Servlet,
ServletConfig {
}
}
- /**
- * @see javax.servlet.Servlet#service(javax.servlet.ServletRequest,
javax.servlet.ServletResponse)
- */
+ @Override
public void service(ServletRequest req, ServletResponse res) {
- final SlingHttpServletRequest request = (SlingHttpServletRequest) req;
+ final SlingJakartaHttpServletRequest request =
(SlingJakartaHttpServletRequest) req;
try {
// prepare the properties for the script
- final SlingBindings props = new SlingBindings();
- props.setRequest((SlingHttpServletRequest) req);
- props.setResponse((SlingHttpServletResponse) res);
+ final SlingJakartaBindings props = new SlingJakartaBindings();
+ props.setRequest(request);
+ props.setResponse((SlingJakartaHttpServletResponse) res);
// try to set content type (unless included)
- if (request.getAttribute(SlingConstants.ATTR_INCLUDE_SERVLET_PATH)
== null) {
+ if (request.getAttribute(RequestDispatcher.INCLUDE_SERVLET_PATH)
== null) {
final String contentType = request.getResponseContentType();
if (contentType != null) {
res.setContentType(contentType);
@@ -524,17 +741,17 @@ class DefaultSlingScript implements SlingScript, Servlet,
ServletConfig {
}
}
+ @Override
public ServletConfig getServletConfig() {
return this;
}
+ @Override
public String getServletInfo() {
return "Script " + scriptName;
}
- /**
- * @see javax.servlet.Servlet#destroy()
- */
+ @Override
public void destroy() {
initParameters = null;
servletContext = null;
@@ -542,32 +759,24 @@ class DefaultSlingScript implements SlingScript, Servlet,
ServletConfig {
// ---------- ServletConfig
------------------------------------------------
- /**
- * @see javax.servlet.ServletConfig#getInitParameter(java.lang.String)
- */
+ @Override
public String getInitParameter(String name) {
final Dictionary<String, String> params = initParameters;
return (params != null) ? params.get(name) : null;
}
- /**
- * @see javax.servlet.ServletConfig#getInitParameterNames()
- */
+ @Override
public Enumeration<String> getInitParameterNames() {
final Dictionary<String, String> params = initParameters;
return (params != null) ? params.keys() : null;
}
- /**
- * @see javax.servlet.ServletConfig#getServletContext()
- */
+ @Override
public ServletContext getServletContext() {
return servletContext;
}
- /**
- * @see javax.servlet.ServletConfig#getServletName()
- */
+ @Override
public String getServletName() {
return this.scriptName;
}
@@ -642,6 +851,143 @@ class DefaultSlingScript implements SlingScript, Servlet,
ServletConfig {
};
}
+ Bindings verifySlingBindings(final SlingJakartaBindings slingBindings)
throws IOException {
+
+ final Bindings bindings = new LazyBindings();
+
+ final SlingJakartaHttpServletRequest request =
slingBindings.getRequest();
+
+ // check sling object
+ Object slingObject = slingBindings.get(SLING);
+ if (slingObject == null) {
+
+ if (request != null) {
+ slingObject = new InternalJakartaScriptHelper(
+ this.bundleContext, this, request,
slingBindings.getResponse(), this.cache);
+ } else {
+ slingObject = new InternalScriptHelper(this.bundleContext,
this, this.cache);
+ }
+ } else if (!(slingObject instanceof SlingJakartaScriptHelper)) {
+ throw fail(SLING, "Wrong type");
+ }
+ final SlingJakartaScriptHelper sling = (SlingJakartaScriptHelper)
slingObject;
+ bindings.put(SLING, sling);
+
+ if (request != null) {
+ final SlingJakartaHttpServletResponse response =
slingBindings.getResponse();
+ if (response == null) {
+ throw fail(RESPONSE, "Missing or wrong type");
+ }
+
+ Object resourceObject = slingBindings.get(RESOURCE);
+ if (resourceObject != null && !(resourceObject instanceof
Resource)) {
+ throw fail(RESOURCE, "Wrong type");
+ }
+
+ Object resolverObject = slingBindings.get(RESOLVER);
+ if (resolverObject != null && !(resolverObject instanceof
ResourceResolver)) {
+ throw fail(RESOLVER, "Wrong type");
+ }
+
+ Object writerObject = slingBindings.get(OUT);
+ if (writerObject != null && !(writerObject instanceof
PrintWriter)) {
+ throw fail(OUT, "Wrong type");
+ }
+
+ // if there is a provided sling script helper, check arguments
+ if (slingBindings.get(SLING) != null) {
+
+ if (sling.getRequest() != request) {
+ throw fail(REQUEST, "Not the same as request field of
SlingScriptHelper");
+ }
+
+ if (sling.getResponse() != response) {
+ throw fail(RESPONSE, "Not the same as response field of
SlingScriptHelper");
+ }
+
+ if (resourceObject != null && sling.getRequest().getResource()
!= resourceObject) {
+ throw fail(RESOURCE, "Not the same as resource of the
SlingScriptHelper request");
+ }
+
+ if (resolverObject != null &&
sling.getRequest().getResourceResolver() != resolverObject) {
+ throw fail(
+ RESOLVER,
+ "Not the same as the resource resolver of the
SlingScriptHelper request's resolver");
+ }
+
+ if (writerObject != null && sling.getResponse().getWriter() !=
writerObject) {
+ throw fail(OUT, "Not the same as writer of the
SlingScriptHelper response");
+ }
+ }
+
+ // set base variables when executing inside a request
+ bindings.put(REQUEST, sling.getRequest());
+ bindings.put(READER, sling.getRequest().getReader());
+ bindings.put(RESPONSE, sling.getResponse());
+ bindings.put(RESOURCE, sling.getRequest().getResource());
+ bindings.put(RESOLVER, sling.getRequest().getResourceResolver());
+ bindings.put(OUT, sling.getResponse().getWriter());
+ }
+
+ Object logObject = slingBindings.get(LOG);
+ if (logObject == null) {
+ logObject = LoggerFactory.getLogger(getLoggerName());
+ } else if (!(logObject instanceof Logger)) {
+ throw fail(LOG, "Wrong type");
+ }
+ bindings.put(LOG, logObject);
+
+ // copy non-base variables
+ for (Map.Entry<String, Object> entry : slingBindings.entrySet()) {
+ if (!bindings.containsKey(entry.getKey())) {
+ bindings.put(entry.getKey(), entry.getValue());
+ }
+ }
+
+ if (!bindingsValuesProviders.isEmpty()) {
+ Set<String> protectedKeys = new HashSet<>();
+ protectedKeys.addAll(PROTECTED_KEYS);
+ ProtectedBindings protectedBindings = new
ProtectedBindings(bindings, protectedKeys);
+
+ long inclusionStart = System.nanoTime();
+ for (BindingsValuesProvider provider : bindingsValuesProviders) {
+ long start = System.nanoTime();
+ provider.addBindings(protectedBindings);
+ long stop = System.nanoTime();
+ LOGGER.trace(
+ "Invoking addBindings() of {} took {} nanoseconds",
+ provider.getClass().getName(),
+ stop - start);
+ if (stop - start > WARN_LIMIT_FOR_BVP_NANOS) {
+ // SLING-11182 - make this work with older implementations
of the Sling API
+ if (request != null && request.getRequestProgressTracker()
!= null) {
+ request.getRequestProgressTracker()
+ .log(String.format(
+ BINDINGS_THRESHOLD_MESSAGE,
+ provider.getClass().getName(),
+ (stop - start) / 1000,
+ WARN_LIMIT_FOR_BVP_NANOS / 1000));
+ } else {
+ if (LOGGER.isInfoEnabled()) {
+ LOGGER.info(String.format(
+ BINDINGS_THRESHOLD_MESSAGE,
+ provider.getClass().getName(),
+ (stop - start) / 1000,
+ WARN_LIMIT_FOR_BVP_NANOS / 1000));
+ }
+ }
+ }
+ }
+ // SLING-11182 - make this work with older implementations of the
Sling API
+ if (request != null && request.getRequestProgressTracker() !=
null) {
+ long duration = (System.nanoTime() - inclusionStart) / 1000;
+ request.getRequestProgressTracker().log("Adding bindings took
" + duration + " microseconds");
+ }
+ }
+
+ return bindings;
+ }
+
Bindings verifySlingBindings(final SlingBindings slingBindings) throws
IOException {
final Bindings bindings = new LazyBindings();
@@ -658,7 +1004,7 @@ class DefaultSlingScript implements SlingScript, Servlet,
ServletConfig {
} else {
slingObject = new InternalScriptHelper(this.bundleContext,
this, this.cache);
}
- } else if (!(slingObject instanceof SlingScriptHelper)) {
+ } else if (!(slingObject instanceof SlingJakartaScriptHelper)) {
throw fail(SLING, "Wrong type");
}
final SlingScriptHelper sling = (SlingScriptHelper) slingObject;
@@ -795,7 +1141,7 @@ class DefaultSlingScript implements SlingScript, Servlet,
ServletConfig {
* Logs the error caused by executing the script in the request progress
* tracker.
*/
- private void logScriptError(SlingHttpServletRequest request, Throwable
throwable) {
+ private void logScriptError(SlingJakartaHttpServletRequest request,
Throwable throwable) {
String message = throwable.getMessage();
if (message != null) {
message = throwable.getMessage().replace('\n', '/');
diff --git
a/src/main/java/org/apache/sling/scripting/core/impl/InternalScriptHelper.java
b/src/main/java/org/apache/sling/scripting/core/impl/InternalJakartaScriptHelper.java
similarity index 72%
copy from
src/main/java/org/apache/sling/scripting/core/impl/InternalScriptHelper.java
copy to
src/main/java/org/apache/sling/scripting/core/impl/InternalJakartaScriptHelper.java
index 526cc8f..4a43a6f 100644
---
a/src/main/java/org/apache/sling/scripting/core/impl/InternalScriptHelper.java
+++
b/src/main/java/org/apache/sling/scripting/core/impl/InternalJakartaScriptHelper.java
@@ -18,31 +18,32 @@
*/
package org.apache.sling.scripting.core.impl;
-import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.SlingJakartaHttpServletRequest;
+import org.apache.sling.api.SlingJakartaHttpServletResponse;
import org.apache.sling.api.scripting.InvalidServiceFilterSyntaxException;
-import org.apache.sling.api.scripting.SlingScript;
-import org.apache.sling.scripting.core.ScriptHelper;
+import org.apache.sling.api.scripting.SlingJakartaScript;
+import org.apache.sling.scripting.core.JakartaScriptHelper;
import org.osgi.framework.BundleContext;
/**
* Internal script helper
*/
-public class InternalScriptHelper extends ScriptHelper {
+public class InternalJakartaScriptHelper extends JakartaScriptHelper {
private final ServiceCache serviceCache;
- public InternalScriptHelper(
+ public InternalJakartaScriptHelper(
final BundleContext ctx,
- final SlingScript script,
- final SlingHttpServletRequest request,
- final SlingHttpServletResponse response,
+ final SlingJakartaScript script,
+ final SlingJakartaHttpServletRequest request,
+ final SlingJakartaHttpServletResponse response,
final ServiceCache cache) {
super(ctx, script, request, response);
this.serviceCache = cache;
}
- public InternalScriptHelper(final BundleContext ctx, final SlingScript
script, final ServiceCache cache) {
+ public InternalJakartaScriptHelper(
+ final BundleContext ctx, final SlingJakartaScript script, final
ServiceCache cache) {
super(ctx, script);
this.serviceCache = cache;
}
diff --git
a/src/main/java/org/apache/sling/scripting/core/impl/InternalScriptHelper.java
b/src/main/java/org/apache/sling/scripting/core/impl/InternalScriptHelper.java
index 526cc8f..1a0449c 100644
---
a/src/main/java/org/apache/sling/scripting/core/impl/InternalScriptHelper.java
+++
b/src/main/java/org/apache/sling/scripting/core/impl/InternalScriptHelper.java
@@ -28,6 +28,7 @@ import org.osgi.framework.BundleContext;
/**
* Internal script helper
*/
+@Deprecated
public class InternalScriptHelper extends ScriptHelper {
private final ServiceCache serviceCache;
diff --git
a/src/main/java/org/apache/sling/scripting/core/impl/ScriptingVariablesConsolePlugin.java
b/src/main/java/org/apache/sling/scripting/core/impl/ScriptingVariablesConsolePlugin.java
index 505e6b3..e7d18cf 100644
---
a/src/main/java/org/apache/sling/scripting/core/impl/ScriptingVariablesConsolePlugin.java
+++
b/src/main/java/org/apache/sling/scripting/core/impl/ScriptingVariablesConsolePlugin.java
@@ -22,10 +22,6 @@ import javax.script.Bindings;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
-import javax.servlet.Servlet;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@@ -33,15 +29,19 @@ import java.net.URL;
import java.util.Collection;
import java.util.Map;
+import jakarta.servlet.Servlet;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.felix.utils.json.JSONWriter;
-import org.apache.felix.webconsole.AbstractWebConsolePlugin;
-import org.apache.felix.webconsole.WebConsoleConstants;
-import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.felix.webconsole.servlet.ServletConstants;
+import org.apache.sling.api.SlingJakartaHttpServletRequest;
import org.apache.sling.api.request.builder.Builders;
import org.apache.sling.api.resource.NonExistingResource;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
-import org.apache.sling.api.scripting.SlingBindings;
+import org.apache.sling.api.scripting.SlingJakartaBindings;
import org.apache.sling.api.scripting.SlingScriptConstants;
import org.apache.sling.scripting.api.BindingsValuesProvider;
import org.apache.sling.scripting.api.BindingsValuesProvidersByContext;
@@ -57,12 +57,12 @@ import org.osgi.service.component.annotations.Reference;
@Component(
property = {
Constants.SERVICE_VENDOR + "=The Apache Software Foundation",
- WebConsoleConstants.PLUGIN_LABEL + "=" +
ScriptingVariablesConsolePlugin.LABEL,
- WebConsoleConstants.PLUGIN_TITLE + "=" +
ScriptingVariablesConsolePlugin.TITLE,
- "felix.webconsole.category=Sling"
+ ServletConstants.PLUGIN_LABEL + "=" +
ScriptingVariablesConsolePlugin.LABEL,
+ ServletConstants.PLUGIN_TITLE + "=" +
ScriptingVariablesConsolePlugin.TITLE,
+ ServletConstants.PLUGIN_CATEGORY + "=Sling"
},
service = {Servlet.class})
-public class ScriptingVariablesConsolePlugin extends AbstractWebConsolePlugin {
+public class ScriptingVariablesConsolePlugin extends HttpServlet {
protected static final String LABEL = "scriptingvariables";
protected static final String TITLE = "Scripting Variables";
@@ -113,21 +113,12 @@ public class ScriptingVariablesConsolePlugin extends
AbstractWebConsolePlugin {
return null;
}
- @Override
- public String getLabel() {
- return LABEL;
- }
-
- @Override
- public String getTitle() {
- return TITLE;
- }
-
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
final String path = request.getPathInfo();
if (FORWARD_PATH.equals(path)) {
+ @SuppressWarnings("resource")
final ResourceResolver resolver =
(ResourceResolver)
request.getAttribute("org.apache.sling.auth.core.ResourceResolver");
if (resolver == null) {
@@ -141,19 +132,13 @@ public class ScriptingVariablesConsolePlugin extends
AbstractWebConsolePlugin {
final String extension = request.getParameter(PARAMETER_EXTENSION);
// resolve is used to get non existing resources as well
final Resource resource = resolver.resolve(resourcePath);
- final SlingHttpServletRequest slingRequest =
Builders.newRequestBuilder(resource)
+ final SlingJakartaHttpServletRequest slingRequest =
Builders.newRequestBuilder(resource)
.useServletContextFrom(request)
.useAttributesFrom(request)
- .build();
+ .buildJakartaRequest();
this.showBindings(slingRequest, response, extension);
return;
}
- super.doGet(request, response);
- }
-
- @Override
- protected void renderContent(HttpServletRequest request,
HttpServletResponse response)
- throws ServletException, IOException {
final PrintWriter pw = response.getWriter();
pw.append("<script type='text/javascript'
src='").append(JS_RES_PATH).append("'></script>");
pw.append("<div id='content'>");
@@ -182,7 +167,7 @@ public class ScriptingVariablesConsolePlugin extends
AbstractWebConsolePlugin {
}
protected void showBindings(
- SlingHttpServletRequest request, HttpServletResponse response,
final String requestedExtension)
+ SlingJakartaHttpServletRequest request, HttpServletResponse
response, final String requestedExtension)
throws ServletException, IOException {
response.setContentType("application/json");
JSONWriter jsonWriter = new JSONWriter(response.getWriter());
@@ -204,7 +189,7 @@ public class ScriptingVariablesConsolePlugin extends
AbstractWebConsolePlugin {
}
private void writeBindingsToJsonWriter(
- JSONWriter jsonWriter, ScriptEngineFactory engineFactory,
SlingHttpServletRequest request)
+ JSONWriter jsonWriter, ScriptEngineFactory engineFactory,
SlingJakartaHttpServletRequest request)
throws IOException {
jsonWriter.object();
jsonWriter.key("engine");
@@ -241,8 +226,8 @@ public class ScriptingVariablesConsolePlugin extends
AbstractWebConsolePlugin {
* @return the bindings (list of key/value pairs) as defined by {@link
Bindings} for the given script engine.
* @throws IOException
*/
- private Bindings getBindingsByEngine(ScriptEngineFactory
scriptEngineFactory, SlingHttpServletRequest request)
- throws IOException {
+ private Bindings getBindingsByEngine(
+ ScriptEngineFactory scriptEngineFactory,
SlingJakartaHttpServletRequest request) throws IOException {
String context = SlingScriptAdapterFactory.BINDINGS_CONTEXT; // use
default context only
final Collection<BindingsValuesProvider> bindingsValuesProviders =
bindingsValuesProviderTracker.getBindingsValuesProviders(scriptEngineFactory,
context);
@@ -258,9 +243,9 @@ public class ScriptingVariablesConsolePlugin extends
AbstractWebConsolePlugin {
null);
// prepare the bindings (similar as in DefaultSlingScript#service)
- final SlingBindings initalBindings = new SlingBindings();
+ final SlingJakartaBindings initalBindings = new SlingJakartaBindings();
initalBindings.setRequest(request);
- initalBindings.setResponse(Builders.newResponseBuilder().build());
+
initalBindings.setResponse(Builders.newResponseBuilder().buildJakartaResponseResult());
final Bindings bindings =
defaultSlingScript.verifySlingBindings(initalBindings);
// only thing being added in {DefaultSlingScript#call(...)} is
resource resolver
diff --git
a/src/main/java/org/apache/sling/scripting/core/impl/SlingScriptAdapterFactory.java
b/src/main/java/org/apache/sling/scripting/core/impl/SlingScriptAdapterFactory.java
index 09ddadd..ef0c010 100644
---
a/src/main/java/org/apache/sling/scripting/core/impl/SlingScriptAdapterFactory.java
+++
b/src/main/java/org/apache/sling/scripting/core/impl/SlingScriptAdapterFactory.java
@@ -25,6 +25,7 @@ import java.util.List;
import org.apache.sling.api.adapter.AdapterFactory;
import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.wrappers.JakartaToJavaxServletWrapper;
import org.apache.sling.commons.mime.MimeTypeProvider;
import org.apache.sling.scripting.api.BindingsValuesProvider;
import org.apache.sling.scripting.api.BindingsValuesProvidersByContext;
@@ -48,6 +49,8 @@ import org.osgi.service.component.annotations.Reference;
Constants.SERVICE_VENDOR + "=The Apache Software Foundation",
Constants.SERVICE_DESCRIPTION + "=Default SlingScriptResolver",
"adaptables=org.apache.sling.api.resource.Resource",
+ "adapters=org.apache.sling.api.scripting.SlingJakartaScript",
+ "adapters=jakarta.servlet.Servlet",
"adapters=org.apache.sling.api.scripting.SlingScript",
"adapters=javax.servlet.Servlet",
"adapter.condition=If the resource's path ends in an extension
registered by a script engine."
@@ -105,8 +108,12 @@ public class SlingScriptAdapterFactory implements
AdapterFactory, MimeTypeProvid
final Collection<BindingsValuesProvider> bindingsValuesProviders =
bindingsValuesProviderTracker.getBindingsValuesProviders(engine.getFactory(),
BINDINGS_CONTEXT);
// unchecked cast
- return (A) new DefaultSlingScript(
+ final DefaultSlingScript script = new DefaultSlingScript(
this.bundleContext, resource, engine,
bindingsValuesProviders, this.serviceCache, scriptCache);
+ if (type == javax.servlet.Servlet.class) {
+ return (A) JakartaToJavaxServletWrapper.toJavaxServlet(script);
+ }
+ return (A) script;
}
return null;
diff --git
a/src/main/java/org/apache/sling/scripting/core/impl/bundled/AbstractBundledRenderUnit.java
b/src/main/java/org/apache/sling/scripting/core/impl/bundled/AbstractBundledRenderUnit.java
index e9c3ba6..f534bfb 100644
---
a/src/main/java/org/apache/sling/scripting/core/impl/bundled/AbstractBundledRenderUnit.java
+++
b/src/main/java/org/apache/sling/scripting/core/impl/bundled/AbstractBundledRenderUnit.java
@@ -19,14 +19,16 @@
package org.apache.sling.scripting.core.impl.bundled;
import javax.script.ScriptException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Set;
-import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.api.SlingHttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import org.apache.sling.api.SlingJakartaHttpServletRequest;
+import org.apache.sling.api.SlingJakartaHttpServletResponse;
+import org.apache.sling.api.wrappers.JavaxToJakartaRequestWrapper;
+import org.apache.sling.api.wrappers.JavaxToJakartaResponseWrapper;
import org.apache.sling.scripting.core.impl.ServiceCache;
import org.apache.sling.scripting.spi.bundle.TypeProvider;
import org.jetbrains.annotations.NotNull;
@@ -139,14 +141,24 @@ abstract class AbstractBundledRenderUnit implements
ExecutableUnit {
throws ScriptException {
try {
ScriptContextProvider.ExecutableContext executableContext =
scriptContextProvider.prepareScriptContext(
- (SlingHttpServletRequest) request,
(SlingHttpServletResponse) response, this);
+ (SlingJakartaHttpServletRequest) request,
(SlingJakartaHttpServletResponse) response, this);
try {
executableContext.eval();
} finally {
executableContext.clean();
}
- } catch (IOException ex) {
+ } catch (final IOException ex) {
throw new ScriptException(ex);
}
}
+
+ @Override
+ public void eval(
+ @NotNull javax.servlet.http.HttpServletRequest request,
+ @NotNull javax.servlet.http.HttpServletResponse response)
+ throws ScriptException {
+ this.eval(
+ JavaxToJakartaRequestWrapper.toJakartaRequest(request),
+ JavaxToJakartaResponseWrapper.toJakartaResponse(response));
+ }
}
diff --git
a/src/main/java/org/apache/sling/scripting/core/impl/bundled/ScriptContextProvider.java
b/src/main/java/org/apache/sling/scripting/core/impl/bundled/ScriptContextProvider.java
index afb5e3d..d1a31a8 100644
---
a/src/main/java/org/apache/sling/scripting/core/impl/bundled/ScriptContextProvider.java
+++
b/src/main/java/org/apache/sling/scripting/core/impl/bundled/ScriptContextProvider.java
@@ -32,16 +32,16 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
-import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.SlingJakartaHttpServletRequest;
+import org.apache.sling.api.SlingJakartaHttpServletResponse;
import org.apache.sling.api.scripting.LazyBindings;
-import org.apache.sling.api.scripting.SlingBindings;
+import org.apache.sling.api.scripting.SlingJakartaBindings;
import org.apache.sling.api.scripting.SlingScriptConstants;
import org.apache.sling.scripting.api.BindingsValuesProvider;
import org.apache.sling.scripting.api.BindingsValuesProvidersByContext;
import
org.apache.sling.scripting.api.resource.ScriptingResourceResolverProvider;
-import org.apache.sling.scripting.core.ScriptHelper;
-import org.apache.sling.scripting.core.impl.InternalScriptHelper;
+import org.apache.sling.scripting.core.JakartaScriptHelper;
+import org.apache.sling.scripting.core.impl.InternalJakartaScriptHelper;
import org.apache.sling.scripting.core.impl.helper.ProtectedBindings;
import org.apache.sling.scripting.spi.bundle.BundledRenderUnit;
import org.osgi.service.component.annotations.Component;
@@ -63,14 +63,14 @@ public class ScriptContextProvider {
+ "general page rendering performance.";
private static final Set<String> PROTECTED_BINDINGS =
Collections.unmodifiableSet(new HashSet<>(Arrays.asList(
- SlingBindings.REQUEST,
- SlingBindings.RESPONSE,
- SlingBindings.READER,
- SlingBindings.RESOURCE,
- SlingBindings.RESOLVER,
- SlingBindings.OUT,
- SlingBindings.LOG,
- SlingBindings.SLING,
+ SlingJakartaBindings.REQUEST,
+ SlingJakartaBindings.RESPONSE,
+ SlingJakartaBindings.READER,
+ SlingJakartaBindings.RESOURCE,
+ SlingJakartaBindings.RESOLVER,
+ SlingJakartaBindings.OUT,
+ SlingJakartaBindings.LOG,
+ SlingJakartaBindings.SLING,
ScriptEngine.FILENAME,
BundledRenderUnit.VARIABLE)));
@@ -84,9 +84,9 @@ public class ScriptContextProvider {
private ScriptingResourceResolverProvider
scriptingResourceResolverProvider;
public ExecutableContext prepareScriptContext(
- SlingHttpServletRequest request, SlingHttpServletResponse
response, ExecutableUnit executable)
+ SlingJakartaHttpServletRequest request,
SlingJakartaHttpServletResponse response, ExecutableUnit executable)
throws IOException {
- InternalScriptHelper scriptHelper = new InternalScriptHelper(
+ InternalJakartaScriptHelper scriptHelper = new
InternalJakartaScriptHelper(
executable.getBundleContext(),
new SlingScriptAdapter(request.getResourceResolver(),
executable.getPath(), "sling/bundle/resource"),
request,
@@ -105,16 +105,17 @@ public class ScriptContextProvider {
Bindings bindings = new LazyBindings();
bindings.put("properties", (LazyBindings.Supplier)
() -> scriptHelper.getRequest().getResource().getValueMap());
- bindings.put(SlingBindings.REQUEST, scriptHelper.getRequest());
- bindings.put(SlingBindings.RESPONSE, scriptHelper.getResponse());
- bindings.put(SlingBindings.READER,
scriptHelper.getRequest().getReader());
- bindings.put(SlingBindings.OUT,
scriptHelper.getResponse().getWriter());
- bindings.put(SlingBindings.RESOURCE,
scriptHelper.getRequest().getResource());
+ bindings.put(SlingJakartaBindings.REQUEST, scriptHelper.getRequest());
+ bindings.put(SlingJakartaBindings.RESPONSE,
scriptHelper.getResponse());
+ bindings.put(SlingJakartaBindings.READER,
scriptHelper.getRequest().getReader());
+ bindings.put(SlingJakartaBindings.OUT,
scriptHelper.getResponse().getWriter());
+ bindings.put(SlingJakartaBindings.RESOURCE,
scriptHelper.getRequest().getResource());
bindings.put(
- SlingBindings.RESOLVER,
scriptHelper.getRequest().getResource().getResourceResolver());
+ SlingJakartaBindings.RESOLVER,
+ scriptHelper.getRequest().getResource().getResourceResolver());
Logger scriptLogger = LoggerFactory.getLogger(executable.getName());
- bindings.put(SlingBindings.LOG, scriptLogger);
- bindings.put(SlingBindings.SLING, scriptHelper);
+ bindings.put(SlingJakartaBindings.LOG, scriptLogger);
+ bindings.put(SlingJakartaBindings.SLING, scriptHelper);
bindings.put(BundledRenderUnit.VARIABLE, executable);
bindings.put(ScriptEngine.FILENAME, executable.getPath());
bindings.put(ScriptEngine.FILENAME.replace(".", "_"),
executable.getPath());
@@ -187,10 +188,10 @@ public class ScriptContextProvider {
void clean() {
Bindings engineBindings =
scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
- if (engineBindings != null &&
engineBindings.containsKey(SlingBindings.SLING)) {
- Object scriptHelper = engineBindings.get(SlingBindings.SLING);
- if (scriptHelper instanceof ScriptHelper) {
- ((ScriptHelper) scriptHelper).cleanup();
+ if (engineBindings != null &&
engineBindings.containsKey(SlingJakartaBindings.SLING)) {
+ Object scriptHelper =
engineBindings.get(SlingJakartaBindings.SLING);
+ if (scriptHelper instanceof JakartaScriptHelper) {
+ ((JakartaScriptHelper) scriptHelper).cleanup();
}
}
}
diff --git
a/src/main/java/org/apache/sling/scripting/core/impl/bundled/SlingScriptAdapter.java
b/src/main/java/org/apache/sling/scripting/core/impl/bundled/SlingScriptAdapter.java
index 46fe9eb..05c964f 100644
---
a/src/main/java/org/apache/sling/scripting/core/impl/bundled/SlingScriptAdapter.java
+++
b/src/main/java/org/apache/sling/scripting/core/impl/bundled/SlingScriptAdapter.java
@@ -21,11 +21,11 @@ package org.apache.sling.scripting.core.impl.bundled;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.SyntheticResource;
-import org.apache.sling.api.scripting.SlingBindings;
-import org.apache.sling.api.scripting.SlingScript;
+import org.apache.sling.api.scripting.SlingJakartaBindings;
+import org.apache.sling.api.scripting.SlingJakartaScript;
import org.jetbrains.annotations.NotNull;
-class SlingScriptAdapter extends SyntheticResource implements SlingScript {
+class SlingScriptAdapter extends SyntheticResource implements
SlingJakartaScript {
SlingScriptAdapter(ResourceResolver resolver, String path, String type) {
super(resolver, path, type);
}
@@ -36,12 +36,12 @@ class SlingScriptAdapter extends SyntheticResource
implements SlingScript {
}
@Override
- public Object eval(@NotNull SlingBindings props) {
+ public Object eval(@NotNull SlingJakartaBindings props) {
throw new IllegalStateException("Not implemented");
}
@Override
- public Object call(@NotNull SlingBindings props, @NotNull String method,
Object... args) {
+ public Object call(@NotNull SlingJakartaBindings props, @NotNull String
method, Object... args) {
throw new IllegalStateException("Not implemented");
}
}
diff --git
a/src/main/java/org/apache/sling/scripting/core/impl/helper/OnDemandReaderRequest.java
b/src/main/java/org/apache/sling/scripting/core/impl/helper/OnDemandReaderRequest.java
index b8a7e25..ddede08 100644
---
a/src/main/java/org/apache/sling/scripting/core/impl/helper/OnDemandReaderRequest.java
+++
b/src/main/java/org/apache/sling/scripting/core/impl/helper/OnDemandReaderRequest.java
@@ -23,6 +23,7 @@ import java.io.BufferedReader;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper;
+@SuppressWarnings("deprecation")
public class OnDemandReaderRequest extends SlingHttpServletRequestWrapper {
private BufferedReader reader;
diff --git
a/src/main/java/org/apache/sling/scripting/core/impl/helper/OnDemandWriterResponse.java
b/src/main/java/org/apache/sling/scripting/core/impl/helper/OnDemandWriterResponse.java
index 54298b0..3d3d832 100644
---
a/src/main/java/org/apache/sling/scripting/core/impl/helper/OnDemandWriterResponse.java
+++
b/src/main/java/org/apache/sling/scripting/core/impl/helper/OnDemandWriterResponse.java
@@ -23,6 +23,7 @@ import java.io.PrintWriter;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.wrappers.SlingHttpServletResponseWrapper;
+@SuppressWarnings("deprecation")
public class OnDemandWriterResponse extends SlingHttpServletResponseWrapper {
private PrintWriter writer;
diff --git
a/src/test/java/org/apache/sling/scripting/core/ScriptHelperTest.java
b/src/test/java/org/apache/sling/scripting/core/JakartaScriptHelperTest.java
similarity index 93%
copy from src/test/java/org/apache/sling/scripting/core/ScriptHelperTest.java
copy to
src/test/java/org/apache/sling/scripting/core/JakartaScriptHelperTest.java
index 9cd08a0..7aa3a3e 100644
--- a/src/test/java/org/apache/sling/scripting/core/ScriptHelperTest.java
+++ b/src/test/java/org/apache/sling/scripting/core/JakartaScriptHelperTest.java
@@ -32,17 +32,17 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
-public class ScriptHelperTest {
+public class JakartaScriptHelperTest {
@Rule
public OsgiContext sling = new OsgiContext();
- private ScriptHelper sh;
+ private JakartaScriptHelper sh;
private final int[] RANKINGS = {42, 62, -12, 76, -123, 0, 7432, -21};
@Before
public void setup() {
- sh = new ScriptHelper(sling.bundleContext(), null);
+ sh = new JakartaScriptHelper(sling.bundleContext(), null);
for (int rank : RANKINGS) {
final Integer svc = rank;
@@ -64,7 +64,7 @@ public class ScriptHelperTest {
@Test
public void testNullRefs() {
- assertNull("Expecting null if no services found",
sh.getService(ScriptHelperTest.class));
+ assertNull("Expecting null if no services found",
sh.getService(JakartaScriptHelperTest.class));
}
@Test
diff --git
a/src/test/java/org/apache/sling/scripting/core/ScriptHelperTest.java
b/src/test/java/org/apache/sling/scripting/core/ScriptHelperTest.java
index 9cd08a0..0fd6526 100644
--- a/src/test/java/org/apache/sling/scripting/core/ScriptHelperTest.java
+++ b/src/test/java/org/apache/sling/scripting/core/ScriptHelperTest.java
@@ -32,6 +32,7 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
+@SuppressWarnings("deprecation")
public class ScriptHelperTest {
@Rule
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 9628aa2..b3395af 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
@@ -790,6 +790,7 @@ public class HtmlScriptingIT extends
ScriptingCoreTestSupport {
* @param classes the classes to include in the OSGi bundle
* @return the provisioning option
*/
+ @SuppressWarnings("rawtypes")
public static UrlProvisionOption buildBundleWithBnd(final Class...
classes) {
final TinyBundle bundle =
org.ops4j.pax.tinybundles.TinyBundles.bundle();
for (final Class clazz : classes) {