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 f055f89 SLING-12643 : Support Jakarta ServletAPI in Scripting
f055f89 is described below
commit f055f89c047e6ae24b7b0a04e7555d4f46f0916c
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Sun May 25 11:01:12 2025 +0200
SLING-12643 : Support Jakarta ServletAPI in Scripting
---
pom.xml | 1 +
.../sling/scripting/core/JakartaScriptHelper.java | 378 -----------------
.../apache/sling/scripting/core/ScriptHelper.java | 231 ++++++++--
.../scripting/core/impl/DefaultSlingScript.java | 465 ++-------------------
.../core/impl/InternalJakartaScriptHelper.java | 63 ---
.../scripting/core/impl/InternalScriptHelper.java | 11 +-
.../core/impl/ScriptingVariablesConsolePlugin.java | 8 +-
.../core/impl/bundled/ScriptContextProvider.java | 52 +--
.../core/impl/bundled/SlingScriptAdapter.java | 10 +-
.../scripting/core/JakartaScriptHelperTest.java | 77 ----
.../sling/scripting/core/ScriptHelperTest.java | 406 +++++++++++++++++-
11 files changed, 694 insertions(+), 1008 deletions(-)
diff --git a/pom.xml b/pom.xml
index 1ffe2bf..f6ff365 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,6 +56,7 @@
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
+ <version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
diff --git
a/src/main/java/org/apache/sling/scripting/core/JakartaScriptHelper.java
b/src/main/java/org/apache/sling/scripting/core/JakartaScriptHelper.java
deleted file mode 100644
index 450fec4..0000000
--- a/src/main/java/org/apache/sling/scripting/core/JakartaScriptHelper.java
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.sling.scripting.core;
-
-import java.io.IOException;
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import jakarta.servlet.RequestDispatcher;
-import jakarta.servlet.ServletException;
-import org.apache.sling.api.SlingIOException;
-import org.apache.sling.api.SlingJakartaHttpServletRequest;
-import org.apache.sling.api.SlingJakartaHttpServletResponse;
-import org.apache.sling.api.SlingServletException;
-import org.apache.sling.api.request.RequestDispatcherOptions;
-import org.apache.sling.api.resource.Resource;
-import org.apache.sling.api.scripting.InvalidServiceFilterSyntaxException;
-import org.apache.sling.api.scripting.SlingJakartaScript;
-import org.apache.sling.api.scripting.SlingJakartaScriptHelper;
-import org.apache.sling.api.wrappers.SlingJakartaHttpServletRequestWrapper;
-import org.apache.sling.api.wrappers.SlingJakartaHttpServletResponseWrapper;
-import
org.apache.sling.scripting.core.impl.helper.OnDemandReaderJakartaRequest;
-import
org.apache.sling.scripting.core.impl.helper.OnDemandWriterJakartaResponse;
-import org.jetbrains.annotations.NotNull;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-import org.slf4j.LoggerFactory;
-
-/**
- * Simple script helper providing access to the (wrapped) response, the
- * on-demand writer and a simple API for request inclusion. Instances of this
- * class are made available to the scripts as the global <code>sling</code>
- * variable.
- *
- * Client code using this object should take care to call {@link #cleanup()}
- * when the object is not used anymore!
- * @since 2.2.0
- */
-public class JakartaScriptHelper implements SlingJakartaScriptHelper {
-
- /** The corresponding script. */
- private final SlingJakartaScript script;
-
- /** The current request or <code>null</code>. */
- private final SlingJakartaHttpServletRequest request;
-
- /** The current response or <code>null</code>. */
- private final SlingJakartaHttpServletResponse response;
-
- /** The bundle context. */
- protected final BundleContext bundleContext;
-
- /**
- * The list of references - we don't need to synchronize this as we are
- * running in one single request.
- */
- protected List<ServiceReference<?>> references;
-
- /** A map of found services. */
- protected Map<String, Object> services;
-
- /**
- * Create a new script helper
- * @param ctx Bundle context
- * @param script The script
- */
- public JakartaScriptHelper(final BundleContext ctx, final
SlingJakartaScript script) {
- if (ctx == null) {
- throw new IllegalArgumentException("Bundle context must not be
null.");
- }
- this.request = null;
- this.response = null;
- this.script = script;
- this.bundleContext = ctx;
- }
-
- /**
- * Create a new script helper
- * @param ctx Bundle context
- * @param script The script
- * @param request The request
- * @param response The response
- */
- public JakartaScriptHelper(
- final BundleContext ctx,
- final SlingJakartaScript script,
- final SlingJakartaHttpServletRequest request,
- final SlingJakartaHttpServletResponse response) {
- if (ctx == null) {
- throw new IllegalArgumentException("Bundle context must not be
null.");
- }
- this.script = script;
- this.request = wrapIfNeeded(request);
- this.response = wrapIfNeeded(response);
- this.bundleContext = ctx;
- }
-
- /**
- * @see org.apache.sling.api.scripting.SlingJakartaScriptHelper#getScript()
- */
- public SlingJakartaScript getScript() {
- return script;
- }
-
- /**
- * @see
org.apache.sling.api.scripting.SlingJakartaScriptHelper#getRequest()
- */
- public SlingJakartaHttpServletRequest getRequest() {
- return request;
- }
-
- /**
- * @see
org.apache.sling.api.scripting.SlingJakartaScriptHelper#getResponse()
- */
- public SlingJakartaHttpServletResponse getResponse() {
- return response;
- }
-
- /**
- * @see
org.apache.sling.api.scripting.SlingJakartaScriptHelper#include(java.lang.String)
- */
- public void include(String path) {
- include(path, (RequestDispatcherOptions) null);
- }
-
- /**
- * @see
org.apache.sling.api.scripting.SlingJakartaScriptHelper#include(java.lang.String,
java.lang.String)
- */
- public void include(String path, String options) {
- include(path, new RequestDispatcherOptions(options));
- }
-
- /**
- * @see
org.apache.sling.api.scripting.SlingJakartaScriptHelper#include(java.lang.String,
org.apache.sling.api.request.RequestDispatcherOptions)
- */
- public void include(String path, RequestDispatcherOptions options) {
- final RequestDispatcher dispatcher =
getRequest().getRequestDispatcher(path, options);
-
- if (dispatcher != null) {
- try {
- dispatcher.include(getRequest(), getResponse());
- } catch (IOException ioe) {
- throw new SlingIOException(ioe);
- } catch (ServletException se) {
- throw new SlingServletException(se);
- }
- }
- }
-
- /**
- * @see
org.apache.sling.api.scripting.SlingJakartaScriptHelper#forward(java.lang.String)
- */
- public void forward(String path) {
- forward(path, (RequestDispatcherOptions) null);
- }
-
- /**
- * @see
org.apache.sling.api.scripting.SlingJakartaScriptHelper#forward(java.lang.String,
java.lang.String)
- */
- public void forward(String path, String options) {
- forward(path, new RequestDispatcherOptions(options));
- }
-
- /**
- * @see
org.apache.sling.api.scripting.SlingJakartaScriptHelper#forward(java.lang.String,
org.apache.sling.api.request.RequestDispatcherOptions)
- */
- public void forward(String path, RequestDispatcherOptions options) {
- final RequestDispatcher dispatcher =
getRequest().getRequestDispatcher(path, options);
-
- if (dispatcher != null) {
- try {
- dispatcher.forward(getRequest(), getResponse());
- } catch (IOException ioe) {
- throw new SlingIOException(ioe);
- } catch (ServletException se) {
- throw new SlingServletException(se);
- }
- }
- }
-
- /**
- * @see org.apache.sling.api.scripting.SlingJakartaScriptHelper#dispose()
- * @deprecated This method is deprecated and should never be called by
clients!
- */
- @Deprecated
- public void dispose() {
- LoggerFactory.getLogger(this.getClass())
- .error(
- "ScriptHelper#dispose has been called. This method is
deprecated and should never be called by clients!");
- }
-
- /**
- * @see
org.apache.sling.api.scripting.SlingJakartaScriptHelper#getService(java.lang.Class)
- */
- @SuppressWarnings("unchecked")
- public <T> T getService(Class<T> type) {
- T service = (this.services == null ? null : (T)
this.services.get(type.getName()));
- if (service == null) {
- final ServiceReference<T> ref =
this.bundleContext.getServiceReference(type);
- if (ref != null) {
- service = this.bundleContext.getService(ref);
- if (service != null) {
- if (this.services == null) {
- this.services = new HashMap<>();
- }
- if (this.references == null) {
- this.references = new ArrayList<>();
- }
- this.references.add(ref);
- this.services.put(type.getName(), service);
- }
- }
- }
- return service;
- }
-
- /**
- * @see
org.apache.sling.api.scripting.SlingJakartaScriptHelper#getServices(java.lang.Class,
java.lang.String)
- */
- @SuppressWarnings("unchecked")
- public <T> T[] getServices(Class<T> serviceType, String filter) throws
InvalidServiceFilterSyntaxException {
- try {
- Collection<ServiceReference<T>> refsCollection =
- this.bundleContext.getServiceReferences(serviceType,
filter);
- T[] result = null;
- if (refsCollection != null) {
- // sort by service ranking (lowest first) (see
ServiceReference#compareTo(Object))
- List<ServiceReference<T>> refsList = new
ArrayList<>(refsCollection);
- Collections.sort(refsList);
- // get the highest ranking first
- Collections.reverse(refsList);
-
- final List<T> objects = new ArrayList<>();
- for (ServiceReference<T> reference : refsList) {
- final T service = this.bundleContext.getService(reference);
- if (service != null) {
- if (this.references == null) {
- this.references = new ArrayList<>();
- }
- this.references.add(reference);
- objects.add(service);
- }
- }
- if (!objects.isEmpty()) {
- T[] srv = (T[]) Array.newInstance(serviceType,
objects.size());
- result = objects.toArray(srv);
- }
- }
- return result;
- } catch (InvalidSyntaxException ise) {
- throw new InvalidServiceFilterSyntaxException(filter, "Invalid
filter syntax", ise);
- }
- }
-
- /**
- * Clean up this instance.
- */
- public void cleanup() {
- if (this.references != null) {
- final Iterator<ServiceReference<?>> i = this.references.iterator();
- while (i.hasNext()) {
- final ServiceReference<?> ref = i.next();
- this.bundleContext.ungetService(ref);
- }
- this.references.clear();
- }
- if (this.services != null) {
- this.services.clear();
- }
- }
-
- /**
- * @see
org.apache.sling.api.scripting.SlingJakartaScriptHelper#forward(org.apache.sling.api.resource.Resource)
- */
- public void forward(Resource resource) {
- forward(resource, (RequestDispatcherOptions) null);
- }
-
- /**
- * @see
org.apache.sling.api.scripting.SlingJakartaScriptHelper#forward(org.apache.sling.api.resource.Resource,
java.lang.String)
- */
- public void forward(Resource resource, String options) {
- forward(resource, new RequestDispatcherOptions(options));
- }
-
- /**
- * @see
org.apache.sling.api.scripting.SlingJakartaScriptHelper#forward(org.apache.sling.api.resource.Resource,
org.apache.sling.api.request.RequestDispatcherOptions)
- */
- public void forward(Resource resource, RequestDispatcherOptions options) {
- final RequestDispatcher dispatcher =
getRequest().getRequestDispatcher(resource, options);
-
- if (dispatcher != null) {
- try {
- dispatcher.forward(getRequest(), getResponse());
- } catch (IOException ioe) {
- throw new SlingIOException(ioe);
- } catch (ServletException se) {
- throw new SlingServletException(se);
- }
- }
- }
-
- /**
- * @see
org.apache.sling.api.scripting.SlingJakartaScriptHelper#forward(org.apache.sling.api.resource.Resource)
- */
- public void include(Resource resource) {
- include(resource, (RequestDispatcherOptions) null);
- }
-
- /**
- * @see
org.apache.sling.api.scripting.SlingJakartaScriptHelper#include(org.apache.sling.api.resource.Resource,
java.lang.String)
- */
- public void include(Resource resource, String options) {
- include(resource, new RequestDispatcherOptions(options));
- }
-
- /**
- * @see
org.apache.sling.api.scripting.SlingJakartaScriptHelper#include(org.apache.sling.api.resource.Resource,
org.apache.sling.api.request.RequestDispatcherOptions)
- */
- public void include(Resource resource, RequestDispatcherOptions options) {
- final RequestDispatcher dispatcher =
getRequest().getRequestDispatcher(resource, options);
-
- if (dispatcher != null) {
- try {
- dispatcher.include(getRequest(), getResponse());
- } catch (IOException ioe) {
- throw new SlingIOException(ioe);
- } catch (ServletException se) {
- throw new SlingServletException(se);
- }
- }
- }
-
- private SlingJakartaHttpServletRequest wrapIfNeeded(@NotNull
SlingJakartaHttpServletRequest request) {
- SlingJakartaHttpServletRequest initialRequest = request;
- while (request instanceof SlingJakartaHttpServletRequestWrapper) {
- if (request instanceof OnDemandReaderJakartaRequest) {
- return initialRequest;
- }
- request = ((SlingJakartaHttpServletRequestWrapper)
request).getSlingRequest();
- }
- return new OnDemandReaderJakartaRequest(initialRequest);
- }
-
- private SlingJakartaHttpServletResponse wrapIfNeeded(@NotNull
SlingJakartaHttpServletResponse response) {
- SlingJakartaHttpServletResponse initialResponse = response;
- while (response instanceof SlingJakartaHttpServletResponseWrapper) {
- if (response instanceof OnDemandWriterJakartaResponse) {
- return initialResponse;
- }
- response = ((SlingJakartaHttpServletResponseWrapper)
response).getSlingResponse();
- }
- return new OnDemandWriterJakartaResponse(initialResponse);
- }
-}
diff --git a/src/main/java/org/apache/sling/scripting/core/ScriptHelper.java
b/src/main/java/org/apache/sling/scripting/core/ScriptHelper.java
index b3fb97f..7f1bd18 100644
--- a/src/main/java/org/apache/sling/scripting/core/ScriptHelper.java
+++ b/src/main/java/org/apache/sling/scripting/core/ScriptHelper.java
@@ -18,9 +18,6 @@
*/
package org.apache.sling.scripting.core;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletException;
-
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.ArrayList;
@@ -31,18 +28,30 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import jakarta.servlet.RequestDispatcher;
+import jakarta.servlet.ServletException;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.SlingIOException;
+import org.apache.sling.api.SlingJakartaHttpServletRequest;
+import org.apache.sling.api.SlingJakartaHttpServletResponse;
import org.apache.sling.api.SlingServletException;
import org.apache.sling.api.request.RequestDispatcherOptions;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.scripting.InvalidServiceFilterSyntaxException;
import org.apache.sling.api.scripting.SlingScript;
import org.apache.sling.api.scripting.SlingScriptHelper;
+import org.apache.sling.api.wrappers.JakartaToJavaxRequestWrapper;
+import org.apache.sling.api.wrappers.JakartaToJavaxResponseWrapper;
+import org.apache.sling.api.wrappers.JavaxToJakartaRequestWrapper;
+import org.apache.sling.api.wrappers.JavaxToJakartaResponseWrapper;
import org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper;
import org.apache.sling.api.wrappers.SlingHttpServletResponseWrapper;
+import org.apache.sling.api.wrappers.SlingJakartaHttpServletRequestWrapper;
+import org.apache.sling.api.wrappers.SlingJakartaHttpServletResponseWrapper;
+import
org.apache.sling.scripting.core.impl.helper.OnDemandReaderJakartaRequest;
import org.apache.sling.scripting.core.impl.helper.OnDemandReaderRequest;
+import
org.apache.sling.scripting.core.impl.helper.OnDemandWriterJakartaResponse;
import org.apache.sling.scripting.core.impl.helper.OnDemandWriterResponse;
import org.jetbrains.annotations.NotNull;
import org.osgi.framework.BundleContext;
@@ -58,19 +67,25 @@ import org.slf4j.LoggerFactory;
*
* Client code using this object should take care to call {@link #cleanup()}
* when the object is not used anymore!
- * @deprecated Use {@link JakartaScriptHelper} instead.
*/
-@Deprecated
public class ScriptHelper implements SlingScriptHelper {
/** The corresponding script. */
private final SlingScript script;
/** The current request or <code>null</code>. */
- private final SlingHttpServletRequest request;
+ @SuppressWarnings("deprecation")
+ private SlingHttpServletRequest request;
+
+ /** The current response or <code>null</code>. */
+ @SuppressWarnings("deprecation")
+ private SlingHttpServletResponse response;
+
+ /** The current request or <code>null</code>. */
+ private final SlingJakartaHttpServletRequest jakartaRequest;
/** The current response or <code>null</code>. */
- private final SlingHttpServletResponse response;
+ private final SlingJakartaHttpServletResponse jakartaResponse;
/** The bundle context. */
protected final BundleContext bundleContext;
@@ -88,12 +103,47 @@ public class ScriptHelper implements SlingScriptHelper {
if (ctx == null) {
throw new IllegalArgumentException("Bundle context must not be
null.");
}
- this.request = null;
- this.response = null;
+ this.jakartaRequest = null;
+ this.jakartaResponse = null;
+ this.script = script;
+ this.bundleContext = ctx;
+ }
+
+ /**
+ * Creates a new script helper instance.
+ *
+ * @param ctx The bundle context, must not be <code>null</code>.
+ * @param script The script, must not be <code>null</code>.
+ * @param request The request, may be <code>null</code>.
+ * @param response The response, may be <code>null</code>.
+ * @param jakartaRequest The Jakarta request, may be <code>null</code>.
+ * @param jakartaResponse The Jakarta response, may be <code>null</code>.
+ * @since 2.2.0
+ */
+ public ScriptHelper(
+ final BundleContext ctx,
+ final SlingScript script,
+ final SlingJakartaHttpServletRequest jakartaRequest,
+ final SlingJakartaHttpServletResponse jakartaResponse) {
+ if (ctx == null) {
+ throw new IllegalArgumentException("Bundle context must not be
null.");
+ }
this.script = script;
+ this.jakartaRequest = wrapIfNeeded(jakartaRequest);
+ this.jakartaResponse = wrapIfNeeded(jakartaResponse);
this.bundleContext = ctx;
}
+ /**
+ * Creates a new script helper instance.
+ *
+ * @param ctx The bundle context, must not be <code>null</code>.
+ * @param script The script, must not be <code>null</code>.
+ * @param request The request, may be <code>null</code>.
+ * @param response The response, may be <code>null</code>.
+ * @deprecated Use {@link #ScriptHelper(BundleContext, SlingScript,
SlingHttpServletRequest, SlingHttpServletResponse,
SlingJakartaHttpServletRequest, SlingJakartaHttpServletResponse)}
+ */
+ @Deprecated
public ScriptHelper(
final BundleContext ctx,
final SlingScript script,
@@ -105,6 +155,8 @@ public class ScriptHelper implements SlingScriptHelper {
this.script = script;
this.request = wrapIfNeeded(request);
this.response = wrapIfNeeded(response);
+ this.jakartaRequest =
JavaxToJakartaRequestWrapper.toJakartaRequest(this.request);
+ this.jakartaResponse =
JavaxToJakartaResponseWrapper.toJakartaResponse(this.response);
this.bundleContext = ctx;
}
@@ -115,17 +167,39 @@ public class ScriptHelper implements SlingScriptHelper {
return script;
}
+ /**
+ * @see
org.apache.sling.api.scripting.SlingScriptHelper#getJakartaRequest()
+ */
+ public SlingJakartaHttpServletRequest getJakartaRequest() {
+ return jakartaRequest;
+ }
+
+ /**
+ * @see
org.apache.sling.api.scripting.SlingScriptHelper#getJakartaResponse()
+ */
+ public SlingJakartaHttpServletResponse getJakartaResponse() {
+ return jakartaResponse;
+ }
+
/**
* @see org.apache.sling.api.scripting.SlingScriptHelper#getRequest()
*/
+ @SuppressWarnings("deprecation")
public SlingHttpServletRequest getRequest() {
+ if (this.request == null && this.jakartaRequest != null) {
+ this.request =
JakartaToJavaxRequestWrapper.toJavaxRequest(this.jakartaRequest);
+ }
return request;
}
/**
* @see org.apache.sling.api.scripting.SlingScriptHelper#getResponse()
*/
+ @SuppressWarnings("deprecation")
public SlingHttpServletResponse getResponse() {
+ if (this.response == null && this.jakartaResponse != null) {
+ this.response =
JakartaToJavaxResponseWrapper.toJavaxResponse(this.jakartaResponse);
+ }
return response;
}
@@ -147,11 +221,11 @@ public class ScriptHelper implements SlingScriptHelper {
* @see
org.apache.sling.api.scripting.SlingScriptHelper#include(java.lang.String,
org.apache.sling.api.request.RequestDispatcherOptions)
*/
public void include(String path, RequestDispatcherOptions options) {
- final RequestDispatcher dispatcher =
getRequest().getRequestDispatcher(path, options);
+ final RequestDispatcher dispatcher =
getJakartaRequest().getRequestDispatcher(path, options);
if (dispatcher != null) {
try {
- dispatcher.include(getRequest(), getResponse());
+ dispatcher.include(getJakartaRequest(), getJakartaResponse());
} catch (IOException ioe) {
throw new SlingIOException(ioe);
} catch (ServletException se) {
@@ -178,11 +252,11 @@ public class ScriptHelper implements SlingScriptHelper {
* @see
org.apache.sling.api.scripting.SlingScriptHelper#forward(java.lang.String,
org.apache.sling.api.request.RequestDispatcherOptions)
*/
public void forward(String path, RequestDispatcherOptions options) {
- final RequestDispatcher dispatcher =
getRequest().getRequestDispatcher(path, options);
+ final RequestDispatcher dispatcher =
getJakartaRequest().getRequestDispatcher(path, options);
if (dispatcher != null) {
try {
- dispatcher.forward(getRequest(), getResponse());
+ dispatcher.forward(getJakartaRequest(), getJakartaResponse());
} catch (IOException ioe) {
throw new SlingIOException(ioe);
} catch (ServletException se) {
@@ -300,11 +374,11 @@ public class ScriptHelper implements SlingScriptHelper {
* @see
org.apache.sling.api.scripting.SlingScriptHelper#forward(org.apache.sling.api.resource.Resource,
org.apache.sling.api.request.RequestDispatcherOptions)
*/
public void forward(Resource resource, RequestDispatcherOptions options) {
- final RequestDispatcher dispatcher =
getRequest().getRequestDispatcher(resource, options);
+ final RequestDispatcher dispatcher =
getJakartaRequest().getRequestDispatcher(resource, options);
if (dispatcher != null) {
try {
- dispatcher.forward(getRequest(), getResponse());
+ dispatcher.forward(getJakartaRequest(), getJakartaResponse());
} catch (IOException ioe) {
throw new SlingIOException(ioe);
} catch (ServletException se) {
@@ -331,11 +405,11 @@ public class ScriptHelper implements SlingScriptHelper {
* @see
org.apache.sling.api.scripting.SlingScriptHelper#include(org.apache.sling.api.resource.Resource,
org.apache.sling.api.request.RequestDispatcherOptions)
*/
public void include(Resource resource, RequestDispatcherOptions options) {
- final RequestDispatcher dispatcher =
getRequest().getRequestDispatcher(resource, options);
+ final RequestDispatcher dispatcher =
getJakartaRequest().getRequestDispatcher(resource, options);
if (dispatcher != null) {
try {
- dispatcher.include(getRequest(), getResponse());
+ dispatcher.include(getJakartaRequest(), getJakartaResponse());
} catch (IOException ioe) {
throw new SlingIOException(ioe);
} catch (ServletException se) {
@@ -344,25 +418,134 @@ public class ScriptHelper implements SlingScriptHelper {
}
}
- private SlingHttpServletRequest wrapIfNeeded(@NotNull
SlingHttpServletRequest request) {
- SlingHttpServletRequest initialRequest = request;
+ @SuppressWarnings("deprecation")
+ private SlingHttpServletRequest findOnDemandReader(final @NotNull
SlingHttpServletRequest initialRequest) {
+ SlingHttpServletRequest request = initialRequest;
while (request instanceof SlingHttpServletRequestWrapper) {
if (request instanceof OnDemandReaderRequest) {
- return initialRequest;
+ return null;
}
request = ((SlingHttpServletRequestWrapper)
request).getSlingRequest();
}
- return new OnDemandReaderRequest(initialRequest);
+ if (request instanceof JakartaToJavaxRequestWrapper) {
+ final SlingJakartaHttpServletRequest initialJakartaRequest =
+ (SlingJakartaHttpServletRequest)
((JakartaToJavaxRequestWrapper) request).getRequest();
+ final SlingJakartaHttpServletRequest entry =
findOnDemandReader(initialJakartaRequest);
+ if (entry == null) {
+ return null;
+ }
+ if (entry instanceof JavaxToJakartaRequestWrapper) {
+ request = (SlingHttpServletRequest)
((JavaxToJakartaRequestWrapper) entry).getRequest();
+ return this.findOnDemandReader(request);
+ }
+ }
+ return request;
+ }
+
+ private SlingJakartaHttpServletRequest findOnDemandReader(
+ final @NotNull SlingJakartaHttpServletRequest initialRequest) {
+ SlingJakartaHttpServletRequest request = initialRequest;
+ while (request instanceof SlingJakartaHttpServletRequestWrapper) {
+ if (request instanceof OnDemandReaderJakartaRequest) {
+ return null;
+ }
+ request = ((SlingJakartaHttpServletRequestWrapper)
request).getSlingRequest();
+ }
+ if (request instanceof JavaxToJakartaRequestWrapper) {
+ @SuppressWarnings("deprecation")
+ final SlingHttpServletRequest initialJavaxRequest =
+ (SlingHttpServletRequest) ((JavaxToJakartaRequestWrapper)
request).getRequest();
+ @SuppressWarnings("deprecation")
+ final SlingHttpServletRequest entry =
findOnDemandReader(initialJavaxRequest);
+ if (entry == null) {
+ return null;
+ }
+ if (entry instanceof JakartaToJavaxRequestWrapper) {
+ request = (SlingJakartaHttpServletRequest)
((JakartaToJavaxRequestWrapper) entry).getRequest();
+ return this.findOnDemandReader(request);
+ }
+ }
+ return request;
}
- private SlingHttpServletResponse wrapIfNeeded(@NotNull
SlingHttpServletResponse response) {
- SlingHttpServletResponse initialResponse = response;
+ @SuppressWarnings("deprecation")
+ private SlingHttpServletResponse findOnDemandWriter(final @NotNull
SlingHttpServletResponse initialResponse) {
+ SlingHttpServletResponse response = initialResponse;
while (response instanceof SlingHttpServletResponseWrapper) {
if (response instanceof OnDemandWriterResponse) {
- return initialResponse;
+ return null;
}
response = ((SlingHttpServletResponseWrapper)
response).getSlingResponse();
}
+ if (response instanceof JakartaToJavaxResponseWrapper) {
+ final SlingJakartaHttpServletResponse initialJakartaResponse =
+ (SlingJakartaHttpServletResponse)
((JakartaToJavaxResponseWrapper) response).getResponse();
+ final SlingJakartaHttpServletResponse entry =
findOnDemandWriter(initialJakartaResponse);
+ if (entry == null) {
+ return null;
+ }
+ if (entry instanceof JakartaToJavaxResponseWrapper) {
+ response = (SlingHttpServletResponse)
((JakartaToJavaxResponseWrapper) entry).getResponse();
+ return this.findOnDemandWriter(response);
+ }
+ }
+ return response;
+ }
+
+ private SlingJakartaHttpServletResponse findOnDemandWriter(
+ final @NotNull SlingJakartaHttpServletResponse initialResponse) {
+ SlingJakartaHttpServletResponse response = initialResponse;
+ while (response instanceof SlingJakartaHttpServletResponseWrapper) {
+ if (response instanceof OnDemandWriterJakartaResponse) {
+ return null;
+ }
+ response = ((SlingJakartaHttpServletResponseWrapper)
response).getSlingResponse();
+ }
+ if (response instanceof JavaxToJakartaResponseWrapper) {
+ @SuppressWarnings("deprecation")
+ final SlingHttpServletResponse initialJavaxResponse =
+ (SlingHttpServletResponse)
((JavaxToJakartaResponseWrapper) response).getResponse();
+ @SuppressWarnings("deprecation")
+ final SlingHttpServletResponse entry =
findOnDemandWriter(initialJavaxResponse);
+ if (entry == null) {
+ return null;
+ }
+ if (entry instanceof JakartaToJavaxResponseWrapper) {
+ response = (SlingJakartaHttpServletResponse)
((JakartaToJavaxResponseWrapper) entry).getResponse();
+ return this.findOnDemandWriter(response);
+ }
+ }
+ return response;
+ }
+
+ private SlingJakartaHttpServletRequest wrapIfNeeded(final @NotNull
SlingJakartaHttpServletRequest initialRequest) {
+ if (this.findOnDemandReader(initialRequest) == null) {
+ return initialRequest;
+ }
+ return new OnDemandReaderJakartaRequest(initialRequest);
+ }
+
+ private SlingJakartaHttpServletResponse wrapIfNeeded(
+ final @NotNull SlingJakartaHttpServletResponse initialResponse) {
+ if (this.findOnDemandWriter(initialResponse) == null) {
+ return initialResponse;
+ }
+ return new OnDemandWriterJakartaResponse(initialResponse);
+ }
+
+ @SuppressWarnings("deprecation")
+ private SlingHttpServletRequest wrapIfNeeded(final @NotNull
SlingHttpServletRequest initialRequest) {
+ if (this.findOnDemandReader(initialRequest) == null) {
+ return initialRequest;
+ }
+ return new OnDemandReaderRequest(initialRequest);
+ }
+
+ @SuppressWarnings("deprecation")
+ private SlingHttpServletResponse wrapIfNeeded(final @NotNull
SlingHttpServletResponse initialResponse) {
+ if (this.findOnDemandWriter(initialResponse) == null) {
+ return initialResponse;
+ }
return new OnDemandWriterResponse(initialResponse);
}
}
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 7a5a3a9..9fcf9c3 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
@@ -51,8 +51,6 @@ 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;
@@ -63,13 +61,9 @@ 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;
@@ -80,18 +74,19 @@ import org.osgi.framework.BundleContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-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;
+import static org.apache.sling.api.scripting.SlingBindings.FLUSH;
+import static org.apache.sling.api.scripting.SlingBindings.JAKARTA_REQUEST;
+import static org.apache.sling.api.scripting.SlingBindings.JAKARTA_RESPONSE;
+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;
-@SuppressWarnings("deprecation")
-class DefaultSlingScript implements SlingScript, SlingJakartaScript, Servlet,
ServletConfig {
+class DefaultSlingScript implements SlingScript, Servlet, ServletConfig {
/** The logger. */
private static final Logger LOGGER =
LoggerFactory.getLogger(DefaultSlingScript.class);
@@ -108,8 +103,9 @@ class DefaultSlingScript implements SlingScript,
SlingJakartaScript, Servlet, Se
private static ThreadLocal<ResourceResolver> requestResourceResolver = new
ThreadLocal<>();
/** The set of protected keys. */
- private static final Set<String> PROTECTED_KEYS =
- new HashSet<>(Arrays.asList(REQUEST, RESPONSE, READER, SLING,
RESOURCE, RESOLVER, OUT, LOG));
+ @SuppressWarnings("deprecation")
+ private static final Set<String> PROTECTED_KEYS = new
HashSet<>(Arrays.asList(
+ REQUEST, RESPONSE, JAKARTA_REQUEST, JAKARTA_RESPONSE, READER,
SLING, RESOURCE, RESOLVER, OUT, LOG));
private static final Integer[] SCOPES = {
SlingScriptConstants.SLING_SCOPE, Integer.valueOf(100),
Integer.valueOf(200)
@@ -145,8 +141,6 @@ class DefaultSlingScript implements SlingScript,
SlingJakartaScript, Servlet, Se
/* The cache for compiled scripts. */
private final ScriptCache scriptCache;
- private final boolean isJakartaScriptEngine;
-
/**
* Constructor
* @param bundleContext The bundle context
@@ -180,7 +174,6 @@ class DefaultSlingScript implements SlingScript,
SlingJakartaScript, Servlet, Se
encoding = "UTF-8";
}
this.scriptEncoding = encoding;
- this.isJakartaScriptEngine = false;
}
// ---------- SlingScript interface
----------------------------------------
@@ -204,9 +197,6 @@ class DefaultSlingScript implements SlingScript,
SlingJakartaScript, Servlet, Se
@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);
@@ -350,9 +340,9 @@ class DefaultSlingScript implements SlingScript,
SlingJakartaScript, Servlet, Se
};
// set the current resource resolver if a request is available
from the bindings
- if (props.getRequest() != null) {
+ if (props.getJakartaRequest() != null) {
oldResolver = requestResourceResolver.get();
-
requestResourceResolver.set(props.getRequest().getResourceResolver());
+
requestResourceResolver.set(props.getJakartaRequest().getResourceResolver());
}
// set the script resource resolver as an attribute
@@ -415,248 +405,7 @@ class DefaultSlingScript implements SlingScript,
SlingJakartaScript, Servlet, Se
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);
- ResourceResolver oldResolver = null;
- try {
- bindings = verifySlingBindings(props);
-
- // 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) {
+ if (props.getJakartaRequest() != null) {
requestResourceResolver.set(oldResolver);
}
@@ -701,9 +450,9 @@ class DefaultSlingScript implements SlingScript,
SlingJakartaScript, Servlet, Se
try {
// prepare the properties for the script
- final SlingJakartaBindings props = new SlingJakartaBindings();
- props.setRequest(request);
- props.setResponse((SlingJakartaHttpServletResponse) res);
+ final SlingBindings props = new SlingBindings();
+ props.setJakartaRequest(request);
+ props.setJakartaResponse((SlingJakartaHttpServletResponse) res);
// try to set content type (unless included)
if (request.getAttribute(RequestDispatcher.INCLUDE_SERVLET_PATH)
== null) {
@@ -851,148 +600,12 @@ class DefaultSlingScript implements SlingScript,
SlingJakartaScript, Servlet, Se
};
}
- 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;
- }
-
+ @SuppressWarnings("deprecation")
Bindings verifySlingBindings(final SlingBindings slingBindings) throws
IOException {
final Bindings bindings = new LazyBindings();
- final SlingHttpServletRequest request = slingBindings.getRequest();
+ final SlingJakartaHttpServletRequest request =
slingBindings.getJakartaRequest();
// check sling object
Object slingObject = slingBindings.get(SLING);
@@ -1000,20 +613,20 @@ class DefaultSlingScript implements SlingScript,
SlingJakartaScript, Servlet, Se
if (request != null) {
slingObject = new InternalScriptHelper(
- this.bundleContext, this, request,
slingBindings.getResponse(), this.cache);
+ this.bundleContext, this, request,
slingBindings.getJakartaResponse(), this.cache);
} else {
slingObject = new InternalScriptHelper(this.bundleContext,
this, this.cache);
}
- } else if (!(slingObject instanceof SlingJakartaScriptHelper)) {
+ } else if (!(slingObject instanceof SlingScriptHelper)) {
throw fail(SLING, "Wrong type");
}
final SlingScriptHelper sling = (SlingScriptHelper) slingObject;
bindings.put(SLING, sling);
if (request != null) {
- final SlingHttpServletResponse response =
slingBindings.getResponse();
+ final SlingJakartaHttpServletResponse response =
slingBindings.getJakartaResponse();
if (response == null) {
- throw fail(RESPONSE, "Missing or wrong type");
+ throw fail(JAKARTA_RESPONSE, "Missing or wrong type");
}
Object resourceObject = slingBindings.get(RESOURCE);
@@ -1034,36 +647,38 @@ class DefaultSlingScript implements SlingScript,
SlingJakartaScript, Servlet, Se
// 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.getJakartaRequest() != request) {
+ throw fail(JAKARTA_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 (sling.getJakartaResponse() != response) {
+ throw fail(JAKARTA_RESPONSE, "Not the same as response
field of SlingScriptHelper");
}
- if (resourceObject != null && sling.getRequest().getResource()
!= resourceObject) {
+ if (resourceObject != null &&
sling.getJakartaRequest().getResource() != resourceObject) {
throw fail(RESOURCE, "Not the same as resource of the
SlingScriptHelper request");
}
- if (resolverObject != null &&
sling.getRequest().getResourceResolver() != resolverObject) {
+ if (resolverObject != null &&
sling.getJakartaRequest().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) {
+ if (writerObject != null &&
sling.getJakartaResponse().getWriter() != writerObject) {
throw fail(OUT, "Not the same as writer of the
SlingScriptHelper response");
}
}
// set base variables when executing inside a request
+ bindings.put(JAKARTA_REQUEST, sling.getJakartaRequest());
+ bindings.put(JAKARTA_RESPONSE, sling.getJakartaResponse());
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());
+ bindings.put(READER, sling.getJakartaRequest().getReader());
+ bindings.put(RESOURCE, sling.getJakartaRequest().getResource());
+ bindings.put(RESOLVER,
sling.getJakartaRequest().getResourceResolver());
+ bindings.put(OUT, sling.getJakartaResponse().getWriter());
}
Object logObject = slingBindings.get(LOG);
diff --git
a/src/main/java/org/apache/sling/scripting/core/impl/InternalJakartaScriptHelper.java
b/src/main/java/org/apache/sling/scripting/core/impl/InternalJakartaScriptHelper.java
deleted file mode 100644
index 4a43a6f..0000000
---
a/src/main/java/org/apache/sling/scripting/core/impl/InternalJakartaScriptHelper.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.sling.scripting.core.impl;
-
-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.SlingJakartaScript;
-import org.apache.sling.scripting.core.JakartaScriptHelper;
-import org.osgi.framework.BundleContext;
-
-/**
- * Internal script helper
- */
-public class InternalJakartaScriptHelper extends JakartaScriptHelper {
-
- private final ServiceCache serviceCache;
-
- public InternalJakartaScriptHelper(
- final BundleContext ctx,
- final SlingJakartaScript script,
- final SlingJakartaHttpServletRequest request,
- final SlingJakartaHttpServletResponse response,
- final ServiceCache cache) {
- super(ctx, script, request, response);
- this.serviceCache = cache;
- }
-
- public InternalJakartaScriptHelper(
- final BundleContext ctx, final SlingJakartaScript script, final
ServiceCache cache) {
- super(ctx, script);
- this.serviceCache = cache;
- }
-
- /**
- * @see
org.apache.sling.api.scripting.SlingScriptHelper#getService(java.lang.Class)
- */
- @Override
- public <T> T getService(Class<T> type) {
- return this.serviceCache.getService(type);
- }
-
- @Override
- public <T> T[] getServices(Class<T> serviceType, String filter) throws
InvalidServiceFilterSyntaxException {
- return this.serviceCache.getServices(serviceType, filter);
- }
-}
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 1a0449c..743e0ea 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
@@ -18,8 +18,8 @@
*/
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;
@@ -28,7 +28,6 @@ import org.osgi.framework.BundleContext;
/**
* Internal script helper
*/
-@Deprecated
public class InternalScriptHelper extends ScriptHelper {
private final ServiceCache serviceCache;
@@ -36,10 +35,10 @@ public class InternalScriptHelper extends ScriptHelper {
public InternalScriptHelper(
final BundleContext ctx,
final SlingScript script,
- final SlingHttpServletRequest request,
- final SlingHttpServletResponse response,
+ final SlingJakartaHttpServletRequest jakartaRequest,
+ final SlingJakartaHttpServletResponse jakartaResponse,
final ServiceCache cache) {
- super(ctx, script, request, response);
+ super(ctx, script, jakartaRequest, jakartaResponse);
this.serviceCache = cache;
}
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 e7d18cf..6615945 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
@@ -41,7 +41,7 @@ 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.SlingJakartaBindings;
+import org.apache.sling.api.scripting.SlingBindings;
import org.apache.sling.api.scripting.SlingScriptConstants;
import org.apache.sling.scripting.api.BindingsValuesProvider;
import org.apache.sling.scripting.api.BindingsValuesProvidersByContext;
@@ -243,9 +243,9 @@ public class ScriptingVariablesConsolePlugin extends
HttpServlet {
null);
// prepare the bindings (similar as in DefaultSlingScript#service)
- final SlingJakartaBindings initalBindings = new SlingJakartaBindings();
- initalBindings.setRequest(request);
-
initalBindings.setResponse(Builders.newResponseBuilder().buildJakartaResponseResult());
+ final SlingBindings initalBindings = new SlingBindings();
+ initalBindings.setJakartaRequest(request);
+
initalBindings.setJakartaResponse(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/bundled/ScriptContextProvider.java
b/src/main/java/org/apache/sling/scripting/core/impl/bundled/ScriptContextProvider.java
index d1a31a8..a6d43d2 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
@@ -35,13 +35,13 @@ import java.util.Set;
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.SlingJakartaBindings;
+import org.apache.sling.api.scripting.SlingBindings;
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.JakartaScriptHelper;
-import org.apache.sling.scripting.core.impl.InternalJakartaScriptHelper;
+import org.apache.sling.scripting.core.ScriptHelper;
+import org.apache.sling.scripting.core.impl.InternalScriptHelper;
import org.apache.sling.scripting.core.impl.helper.ProtectedBindings;
import org.apache.sling.scripting.spi.bundle.BundledRenderUnit;
import org.osgi.service.component.annotations.Component;
@@ -62,15 +62,18 @@ public class ScriptContextProvider {
+ " limit of %s microseconds; if this message appears
often it indicates that this BindingsValuesProvider has an impact on "
+ "general page rendering performance.";
+ @SuppressWarnings("deprecation")
private static final Set<String> PROTECTED_BINDINGS =
Collections.unmodifiableSet(new HashSet<>(Arrays.asList(
- SlingJakartaBindings.REQUEST,
- SlingJakartaBindings.RESPONSE,
- SlingJakartaBindings.READER,
- SlingJakartaBindings.RESOURCE,
- SlingJakartaBindings.RESOLVER,
- SlingJakartaBindings.OUT,
- SlingJakartaBindings.LOG,
- SlingJakartaBindings.SLING,
+ SlingBindings.REQUEST,
+ SlingBindings.RESPONSE,
+ SlingBindings.JAKARTA_REQUEST,
+ SlingBindings.JAKARTA_RESPONSE,
+ SlingBindings.READER,
+ SlingBindings.RESOURCE,
+ SlingBindings.RESOLVER,
+ SlingBindings.OUT,
+ SlingBindings.LOG,
+ SlingBindings.SLING,
ScriptEngine.FILENAME,
BundledRenderUnit.VARIABLE)));
@@ -86,7 +89,7 @@ public class ScriptContextProvider {
public ExecutableContext prepareScriptContext(
SlingJakartaHttpServletRequest request,
SlingJakartaHttpServletResponse response, ExecutableUnit executable)
throws IOException {
- InternalJakartaScriptHelper scriptHelper = new
InternalJakartaScriptHelper(
+ InternalScriptHelper scriptHelper = new InternalScriptHelper(
executable.getBundleContext(),
new SlingScriptAdapter(request.getResourceResolver(),
executable.getPath(), "sling/bundle/resource"),
request,
@@ -105,17 +108,16 @@ public class ScriptContextProvider {
Bindings bindings = new LazyBindings();
bindings.put("properties", (LazyBindings.Supplier)
() -> scriptHelper.getRequest().getResource().getValueMap());
- 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.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.RESOLVER,
- scriptHelper.getRequest().getResource().getResourceResolver());
+ SlingBindings.RESOLVER,
scriptHelper.getRequest().getResource().getResourceResolver());
Logger scriptLogger = LoggerFactory.getLogger(executable.getName());
- bindings.put(SlingJakartaBindings.LOG, scriptLogger);
- bindings.put(SlingJakartaBindings.SLING, scriptHelper);
+ bindings.put(SlingBindings.LOG, scriptLogger);
+ bindings.put(SlingBindings.SLING, scriptHelper);
bindings.put(BundledRenderUnit.VARIABLE, executable);
bindings.put(ScriptEngine.FILENAME, executable.getPath());
bindings.put(ScriptEngine.FILENAME.replace(".", "_"),
executable.getPath());
@@ -188,10 +190,10 @@ public class ScriptContextProvider {
void clean() {
Bindings engineBindings =
scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
- if (engineBindings != null &&
engineBindings.containsKey(SlingJakartaBindings.SLING)) {
- Object scriptHelper =
engineBindings.get(SlingJakartaBindings.SLING);
- if (scriptHelper instanceof JakartaScriptHelper) {
- ((JakartaScriptHelper) scriptHelper).cleanup();
+ if (engineBindings != null &&
engineBindings.containsKey(SlingBindings.SLING)) {
+ Object scriptHelper = engineBindings.get(SlingBindings.SLING);
+ if (scriptHelper instanceof ScriptHelper) {
+ ((ScriptHelper) 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 05c964f..46fe9eb 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.SlingJakartaBindings;
-import org.apache.sling.api.scripting.SlingJakartaScript;
+import org.apache.sling.api.scripting.SlingBindings;
+import org.apache.sling.api.scripting.SlingScript;
import org.jetbrains.annotations.NotNull;
-class SlingScriptAdapter extends SyntheticResource implements
SlingJakartaScript {
+class SlingScriptAdapter extends SyntheticResource implements SlingScript {
SlingScriptAdapter(ResourceResolver resolver, String path, String type) {
super(resolver, path, type);
}
@@ -36,12 +36,12 @@ class SlingScriptAdapter extends SyntheticResource
implements SlingJakartaScript
}
@Override
- public Object eval(@NotNull SlingJakartaBindings props) {
+ public Object eval(@NotNull SlingBindings props) {
throw new IllegalStateException("Not implemented");
}
@Override
- public Object call(@NotNull SlingJakartaBindings props, @NotNull String
method, Object... args) {
+ public Object call(@NotNull SlingBindings props, @NotNull String method,
Object... args) {
throw new IllegalStateException("Not implemented");
}
}
diff --git
a/src/test/java/org/apache/sling/scripting/core/JakartaScriptHelperTest.java
b/src/test/java/org/apache/sling/scripting/core/JakartaScriptHelperTest.java
deleted file mode 100644
index 7aa3a3e..0000000
--- a/src/test/java/org/apache/sling/scripting/core/JakartaScriptHelperTest.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.sling.scripting.core;
-
-import java.util.Dictionary;
-import java.util.Hashtable;
-
-import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.osgi.framework.Constants;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
-
-public class JakartaScriptHelperTest {
-
- @Rule
- public OsgiContext sling = new OsgiContext();
-
- private JakartaScriptHelper sh;
- private final int[] RANKINGS = {42, 62, -12, 76, -123, 0, 7432, -21};
-
- @Before
- public void setup() {
- sh = new JakartaScriptHelper(sling.bundleContext(), null);
-
- for (int rank : RANKINGS) {
- final Integer svc = rank;
- final Dictionary<String, Object> props = new Hashtable<String,
Object>();
- props.put(Constants.SERVICE_RANKING, rank);
- sling.bundleContext().registerService(Integer.class.getName(),
svc, props);
- }
- }
-
- private void assertHigherRankingComesFirst(Integer... values) {
- Integer previous = null;
- for (Integer current : values) {
- if (previous != null && current > previous) {
- fail("Ranking " + current + " is higher than previous " +
previous);
- }
- previous = current;
- }
- }
-
- @Test
- public void testNullRefs() {
- assertNull("Expecting null if no services found",
sh.getService(JakartaScriptHelperTest.class));
- }
-
- @Test
- public void testGetServicesOrdering() {
- final Integer[] svc = sh.getServices(Integer.class, null);
- assertNotNull(svc);
- assertEquals(RANKINGS.length, svc.length);
- assertHigherRankingComesFirst(svc);
- }
-}
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 0fd6526..f0772c8 100644
--- a/src/test/java/org/apache/sling/scripting/core/ScriptHelperTest.java
+++ b/src/test/java/org/apache/sling/scripting/core/ScriptHelperTest.java
@@ -21,18 +21,36 @@ package org.apache.sling.scripting.core;
import java.util.Dictionary;
import java.util.Hashtable;
+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.wrappers.JakartaToJavaxRequestWrapper;
+import org.apache.sling.api.wrappers.JakartaToJavaxResponseWrapper;
+import org.apache.sling.api.wrappers.JavaxToJakartaRequestWrapper;
+import org.apache.sling.api.wrappers.JavaxToJakartaResponseWrapper;
+import org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper;
+import org.apache.sling.api.wrappers.SlingHttpServletResponseWrapper;
+import org.apache.sling.api.wrappers.SlingJakartaHttpServletRequestWrapper;
+import org.apache.sling.api.wrappers.SlingJakartaHttpServletResponseWrapper;
+import
org.apache.sling.scripting.core.impl.helper.OnDemandReaderJakartaRequest;
+import org.apache.sling.scripting.core.impl.helper.OnDemandReaderRequest;
+import
org.apache.sling.scripting.core.impl.helper.OnDemandWriterJakartaResponse;
+import org.apache.sling.scripting.core.impl.helper.OnDemandWriterResponse;
import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
+import org.mockito.Mockito;
import org.osgi.framework.Constants;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-@SuppressWarnings("deprecation")
public class ScriptHelperTest {
@Rule
@@ -75,4 +93,390 @@ public class ScriptHelperTest {
assertEquals(RANKINGS.length, svc.length);
assertHigherRankingComesFirst(svc);
}
+
+ @Test
+ public void testJakartaGetRequestResponseNoWrap() {
+ final SlingJakartaHttpServletRequest req1 =
Mockito.mock(OnDemandReaderJakartaRequest.class);
+ final SlingJakartaHttpServletRequest request = new
SlingJakartaHttpServletRequestWrapper(req1);
+ final SlingJakartaHttpServletResponse res1 =
Mockito.mock(OnDemandWriterJakartaResponse.class);
+ final SlingJakartaHttpServletResponse response = new
SlingJakartaHttpServletResponseWrapper(res1);
+
+ final ScriptHelper scriptHelper = new
ScriptHelper(sling.bundleContext(), null, request, response);
+
+ assertNotNull(scriptHelper.getJakartaRequest());
+ assertSame(request, scriptHelper.getJakartaRequest());
+
+ assertNotNull(scriptHelper.getRequest());
+ assertTrue(scriptHelper.getRequest() instanceof
JakartaToJavaxRequestWrapper);
+ assertSame(
+ scriptHelper.getJakartaRequest(),
+ ((JakartaToJavaxRequestWrapper)
scriptHelper.getRequest()).getRequest());
+
+ assertNotNull(scriptHelper.getJakartaResponse());
+ assertSame(response, scriptHelper.getJakartaResponse());
+
+ assertNotNull(scriptHelper.getResponse());
+ assertTrue(scriptHelper.getResponse() instanceof
JakartaToJavaxResponseWrapper);
+ assertSame(
+ scriptHelper.getJakartaResponse(),
+ ((JakartaToJavaxResponseWrapper)
scriptHelper.getResponse()).getResponse());
+ }
+
+ @SuppressWarnings("deprecation")
+ @Test
+ public void testGetRequestResponseNoWrap() {
+ final SlingHttpServletRequest req1 =
Mockito.mock(OnDemandReaderRequest.class);
+ final SlingHttpServletRequest request = new
SlingHttpServletRequestWrapper(req1);
+ final SlingHttpServletResponse res1 =
Mockito.mock(OnDemandWriterResponse.class);
+ final SlingHttpServletResponse response = new
SlingHttpServletResponseWrapper(res1);
+
+ final ScriptHelper scriptHelper = new
ScriptHelper(sling.bundleContext(), null, request, response);
+
+ assertNotNull(scriptHelper.getRequest());
+ assertSame(request, scriptHelper.getRequest());
+
+ assertNotNull(scriptHelper.getJakartaRequest());
+ assertTrue(scriptHelper.getJakartaRequest() instanceof
JavaxToJakartaRequestWrapper);
+ assertSame(
+ scriptHelper.getRequest(),
+ ((JavaxToJakartaRequestWrapper)
scriptHelper.getJakartaRequest()).getRequest());
+
+ assertNotNull(scriptHelper.getResponse());
+ assertSame(response, scriptHelper.getResponse());
+
+ assertNotNull(scriptHelper.getJakartaResponse());
+ assertTrue(scriptHelper.getJakartaResponse() instanceof
JavaxToJakartaResponseWrapper);
+ assertSame(
+ scriptHelper.getResponse(),
+ ((JavaxToJakartaResponseWrapper)
scriptHelper.getJakartaResponse()).getResponse());
+ }
+
+ @Test
+ public void testJakartaGetRequestResponseWrap() {
+ final SlingJakartaHttpServletRequest request =
Mockito.mock(SlingJakartaHttpServletRequest.class);
+ final SlingJakartaHttpServletResponse response =
Mockito.mock(SlingJakartaHttpServletResponse.class);
+
+ final ScriptHelper scriptHelper = new
ScriptHelper(sling.bundleContext(), null, request, response);
+
+ assertNotNull(scriptHelper.getJakartaRequest());
+ assertTrue(scriptHelper.getJakartaRequest() instanceof
OnDemandReaderJakartaRequest);
+ assertSame(request, ((OnDemandReaderJakartaRequest)
scriptHelper.getJakartaRequest()).getRequest());
+
+ assertNotNull(scriptHelper.getRequest());
+ assertTrue(scriptHelper.getRequest() instanceof
JakartaToJavaxRequestWrapper);
+ assertSame(
+ scriptHelper.getJakartaRequest(),
+ ((JakartaToJavaxRequestWrapper)
scriptHelper.getRequest()).getRequest());
+
+ assertNotNull(scriptHelper.getJakartaResponse());
+ assertTrue(scriptHelper.getJakartaResponse() instanceof
OnDemandWriterJakartaResponse);
+ assertSame(response, ((OnDemandWriterJakartaResponse)
scriptHelper.getJakartaResponse()).getResponse());
+
+ assertNotNull(scriptHelper.getResponse());
+ assertTrue(scriptHelper.getResponse() instanceof
JakartaToJavaxResponseWrapper);
+ assertSame(
+ scriptHelper.getJakartaResponse(),
+ ((JakartaToJavaxResponseWrapper)
scriptHelper.getResponse()).getResponse());
+ }
+
+ @SuppressWarnings("deprecation")
+ @Test
+ public void testGetRequestResponseWrap() {
+ final SlingHttpServletRequest request =
Mockito.mock(SlingHttpServletRequest.class);
+ final SlingHttpServletResponse response =
Mockito.mock(SlingHttpServletResponse.class);
+
+ final ScriptHelper scriptHelper = new
ScriptHelper(sling.bundleContext(), null, request, response);
+
+ assertNotNull(scriptHelper.getRequest());
+ assertTrue(scriptHelper.getRequest() instanceof OnDemandReaderRequest);
+ assertSame(request, ((OnDemandReaderRequest)
scriptHelper.getRequest()).getRequest());
+
+ assertNotNull(scriptHelper.getJakartaRequest());
+ assertTrue(scriptHelper.getJakartaRequest() instanceof
JavaxToJakartaRequestWrapper);
+ assertSame(
+ scriptHelper.getRequest(),
+ ((JavaxToJakartaRequestWrapper)
scriptHelper.getJakartaRequest()).getRequest());
+
+ assertNotNull(scriptHelper.getResponse());
+ assertTrue(scriptHelper.getResponse() instanceof
OnDemandWriterResponse);
+ assertSame(response, ((OnDemandWriterResponse)
scriptHelper.getResponse()).getResponse());
+
+ assertNotNull(scriptHelper.getJakartaResponse());
+ assertTrue(scriptHelper.getJakartaResponse() instanceof
JavaxToJakartaResponseWrapper);
+ assertSame(
+ scriptHelper.getResponse(),
+ ((JavaxToJakartaResponseWrapper)
scriptHelper.getJakartaResponse()).getResponse());
+ }
+
+ @SuppressWarnings("deprecation")
+ @Test
+ public void testJakartaGetRequestResponseCrossNoWrap() {
+ final SlingHttpServletRequest req1 =
Mockito.mock(OnDemandReaderRequest.class);
+ final SlingJakartaHttpServletRequest req2 =
JavaxToJakartaRequestWrapper.toJakartaRequest(req1);
+ final SlingJakartaHttpServletRequest request = new
SlingJakartaHttpServletRequestWrapper(req2);
+ final SlingHttpServletResponse res1 =
Mockito.mock(OnDemandWriterResponse.class);
+ final SlingJakartaHttpServletResponse res2 =
JavaxToJakartaResponseWrapper.toJakartaResponse(res1);
+ final SlingJakartaHttpServletResponse response = new
SlingJakartaHttpServletResponseWrapper(res2);
+
+ final ScriptHelper scriptHelper = new
ScriptHelper(sling.bundleContext(), null, request, response);
+
+ assertNotNull(scriptHelper.getJakartaRequest());
+ assertSame(request, scriptHelper.getJakartaRequest());
+
+ assertNotNull(scriptHelper.getRequest());
+ assertTrue(scriptHelper.getRequest() instanceof
JakartaToJavaxRequestWrapper);
+ assertSame(
+ scriptHelper.getJakartaRequest(),
+ ((JakartaToJavaxRequestWrapper)
scriptHelper.getRequest()).getRequest());
+
+ assertNotNull(scriptHelper.getJakartaResponse());
+ assertSame(response, scriptHelper.getJakartaResponse());
+
+ assertNotNull(scriptHelper.getResponse());
+ assertTrue(scriptHelper.getResponse() instanceof
JakartaToJavaxResponseWrapper);
+ assertSame(
+ scriptHelper.getJakartaResponse(),
+ ((JakartaToJavaxResponseWrapper)
scriptHelper.getResponse()).getResponse());
+ }
+
+ @SuppressWarnings("deprecation")
+ @Test
+ public void testGetRequestResponseCrossNoWrap() {
+ final SlingJakartaHttpServletRequest req1 =
Mockito.mock(OnDemandReaderJakartaRequest.class);
+ final SlingHttpServletRequest req2 =
JakartaToJavaxRequestWrapper.toJavaxRequest(req1);
+ final SlingHttpServletRequest request = new
SlingHttpServletRequestWrapper(req2);
+ final SlingJakartaHttpServletResponse res1 =
Mockito.mock(OnDemandWriterJakartaResponse.class);
+ final SlingHttpServletResponse res2 =
JakartaToJavaxResponseWrapper.toJavaxResponse(res1);
+ final SlingHttpServletResponse response = new
SlingHttpServletResponseWrapper(res2);
+
+ final ScriptHelper scriptHelper = new
ScriptHelper(sling.bundleContext(), null, request, response);
+
+ assertNotNull(scriptHelper.getRequest());
+ assertSame(request, scriptHelper.getRequest());
+
+ assertNotNull(scriptHelper.getJakartaRequest());
+ assertTrue(scriptHelper.getJakartaRequest() instanceof
JavaxToJakartaRequestWrapper);
+ assertSame(
+ scriptHelper.getRequest(),
+ ((JavaxToJakartaRequestWrapper)
scriptHelper.getJakartaRequest()).getRequest());
+
+ assertNotNull(scriptHelper.getResponse());
+ assertSame(response, scriptHelper.getResponse());
+
+ assertNotNull(scriptHelper.getJakartaResponse());
+ assertTrue(scriptHelper.getJakartaResponse() instanceof
JavaxToJakartaResponseWrapper);
+ assertSame(
+ scriptHelper.getResponse(),
+ ((JavaxToJakartaResponseWrapper)
scriptHelper.getJakartaResponse()).getResponse());
+ }
+
+ @SuppressWarnings("deprecation")
+ @Test
+ public void testJakartaGetRequestResponseCross2NoWrap() {
+ final SlingJakartaHttpServletRequest req1 =
Mockito.mock(OnDemandReaderJakartaRequest.class);
+ final SlingHttpServletRequest req2 =
JakartaToJavaxRequestWrapper.toJavaxRequest(req1);
+ final SlingJakartaHttpServletRequest req3 =
JavaxToJakartaRequestWrapper.toJakartaRequest(req2);
+ final SlingJakartaHttpServletRequest request = new
SlingJakartaHttpServletRequestWrapper(req3);
+ final SlingJakartaHttpServletResponse res1 =
Mockito.mock(OnDemandWriterJakartaResponse.class);
+ final SlingHttpServletResponse res2 =
JakartaToJavaxResponseWrapper.toJavaxResponse(res1);
+ final SlingJakartaHttpServletResponse res3 =
JavaxToJakartaResponseWrapper.toJakartaResponse(res2);
+ final SlingJakartaHttpServletResponse response = new
SlingJakartaHttpServletResponseWrapper(res3);
+
+ final ScriptHelper scriptHelper = new
ScriptHelper(sling.bundleContext(), null, request, response);
+
+ assertNotNull(scriptHelper.getJakartaRequest());
+ assertSame(request, scriptHelper.getJakartaRequest());
+
+ assertNotNull(scriptHelper.getRequest());
+ assertTrue(scriptHelper.getRequest() instanceof
JakartaToJavaxRequestWrapper);
+ assertSame(
+ scriptHelper.getJakartaRequest(),
+ ((JakartaToJavaxRequestWrapper)
scriptHelper.getRequest()).getRequest());
+
+ assertNotNull(scriptHelper.getJakartaResponse());
+ assertSame(response, scriptHelper.getJakartaResponse());
+
+ assertNotNull(scriptHelper.getResponse());
+ assertTrue(scriptHelper.getResponse() instanceof
JakartaToJavaxResponseWrapper);
+ assertSame(
+ scriptHelper.getJakartaResponse(),
+ ((JakartaToJavaxResponseWrapper)
scriptHelper.getResponse()).getResponse());
+ }
+
+ @SuppressWarnings("deprecation")
+ @Test
+ public void testGetRequestResponseCross2NoWrap() {
+ final SlingHttpServletRequest req1 =
Mockito.mock(OnDemandReaderRequest.class);
+ final SlingJakartaHttpServletRequest req2 =
JavaxToJakartaRequestWrapper.toJakartaRequest(req1);
+ final SlingHttpServletRequest req3 =
JakartaToJavaxRequestWrapper.toJavaxRequest(req2);
+ final SlingHttpServletRequest request = new
SlingHttpServletRequestWrapper(req3);
+ final SlingHttpServletResponse res1 =
Mockito.mock(OnDemandWriterResponse.class);
+ final SlingJakartaHttpServletResponse res2 =
JavaxToJakartaResponseWrapper.toJakartaResponse(res1);
+ final SlingHttpServletResponse res3 =
JakartaToJavaxResponseWrapper.toJavaxResponse(res2);
+ final SlingHttpServletResponse response = new
SlingHttpServletResponseWrapper(res3);
+
+ final ScriptHelper scriptHelper = new
ScriptHelper(sling.bundleContext(), null, request, response);
+
+ assertNotNull(scriptHelper.getRequest());
+ assertSame(request, scriptHelper.getRequest());
+
+ assertNotNull(scriptHelper.getJakartaRequest());
+ assertTrue(scriptHelper.getJakartaRequest() instanceof
JavaxToJakartaRequestWrapper);
+ assertSame(
+ scriptHelper.getRequest(),
+ ((JavaxToJakartaRequestWrapper)
scriptHelper.getJakartaRequest()).getRequest());
+
+ assertNotNull(scriptHelper.getResponse());
+ assertSame(response, scriptHelper.getResponse());
+
+ assertNotNull(scriptHelper.getJakartaResponse());
+ assertTrue(scriptHelper.getJakartaResponse() instanceof
JavaxToJakartaResponseWrapper);
+ assertSame(
+ scriptHelper.getResponse(),
+ ((JavaxToJakartaResponseWrapper)
scriptHelper.getJakartaResponse()).getResponse());
+ }
+
+ @SuppressWarnings("deprecation")
+ @Test
+ public void testJakartaGetRequestResponseCross3NoWrap() {
+ final SlingHttpServletRequest req1 =
Mockito.mock(OnDemandReaderRequest.class);
+ final SlingJakartaHttpServletRequest req2 =
JavaxToJakartaRequestWrapper.toJakartaRequest(req1);
+ final SlingHttpServletRequest req3 =
JakartaToJavaxRequestWrapper.toJavaxRequest(req2);
+ final SlingJakartaHttpServletRequest req4 =
JavaxToJakartaRequestWrapper.toJakartaRequest(req3);
+ final SlingJakartaHttpServletRequest request = new
SlingJakartaHttpServletRequestWrapper(req4);
+ final SlingHttpServletResponse res1 =
Mockito.mock(OnDemandWriterResponse.class);
+ final SlingJakartaHttpServletResponse res2 =
JavaxToJakartaResponseWrapper.toJakartaResponse(res1);
+ final SlingHttpServletResponse res3 =
JakartaToJavaxResponseWrapper.toJavaxResponse(res2);
+ final SlingJakartaHttpServletResponse res4 =
JavaxToJakartaResponseWrapper.toJakartaResponse(res3);
+ final SlingJakartaHttpServletResponse response = new
SlingJakartaHttpServletResponseWrapper(res4);
+
+ final ScriptHelper scriptHelper = new
ScriptHelper(sling.bundleContext(), null, request, response);
+
+ assertNotNull(scriptHelper.getJakartaRequest());
+ assertSame(request, scriptHelper.getJakartaRequest());
+
+ assertNotNull(scriptHelper.getRequest());
+ assertTrue(scriptHelper.getRequest() instanceof
JakartaToJavaxRequestWrapper);
+ assertSame(
+ scriptHelper.getJakartaRequest(),
+ ((JakartaToJavaxRequestWrapper)
scriptHelper.getRequest()).getRequest());
+
+ assertNotNull(scriptHelper.getJakartaResponse());
+ assertSame(response, scriptHelper.getJakartaResponse());
+
+ assertNotNull(scriptHelper.getResponse());
+ assertTrue(scriptHelper.getResponse() instanceof
JakartaToJavaxResponseWrapper);
+ assertSame(
+ scriptHelper.getJakartaResponse(),
+ ((JakartaToJavaxResponseWrapper)
scriptHelper.getResponse()).getResponse());
+ }
+
+ @SuppressWarnings("deprecation")
+ @Test
+ public void testGetRequestResponseCross3NoWrap() {
+ final SlingJakartaHttpServletRequest req1 =
Mockito.mock(OnDemandReaderJakartaRequest.class);
+ final SlingHttpServletRequest req2 =
JakartaToJavaxRequestWrapper.toJavaxRequest(req1);
+ final SlingJakartaHttpServletRequest req3 =
JavaxToJakartaRequestWrapper.toJakartaRequest(req2);
+ final SlingHttpServletRequest req4 =
JakartaToJavaxRequestWrapper.toJavaxRequest(req3);
+ final SlingHttpServletRequest request = new
SlingHttpServletRequestWrapper(req4);
+ final SlingJakartaHttpServletResponse res1 =
Mockito.mock(OnDemandWriterJakartaResponse.class);
+ final SlingHttpServletResponse res2 =
JakartaToJavaxResponseWrapper.toJavaxResponse(res1);
+ final SlingJakartaHttpServletResponse res3 =
JavaxToJakartaResponseWrapper.toJakartaResponse(res2);
+ final SlingHttpServletResponse res4 =
JakartaToJavaxResponseWrapper.toJavaxResponse(res3);
+ final SlingHttpServletResponse response = new
SlingHttpServletResponseWrapper(res4);
+
+ final ScriptHelper scriptHelper = new
ScriptHelper(sling.bundleContext(), null, request, response);
+
+ assertNotNull(scriptHelper.getRequest());
+ assertSame(request, scriptHelper.getRequest());
+
+ assertNotNull(scriptHelper.getJakartaRequest());
+ assertTrue(scriptHelper.getJakartaRequest() instanceof
JavaxToJakartaRequestWrapper);
+ assertSame(
+ scriptHelper.getRequest(),
+ ((JavaxToJakartaRequestWrapper)
scriptHelper.getJakartaRequest()).getRequest());
+
+ assertNotNull(scriptHelper.getResponse());
+ assertSame(response, scriptHelper.getResponse());
+
+ assertNotNull(scriptHelper.getJakartaResponse());
+ assertTrue(scriptHelper.getJakartaResponse() instanceof
JavaxToJakartaResponseWrapper);
+ assertSame(
+ scriptHelper.getResponse(),
+ ((JavaxToJakartaResponseWrapper)
scriptHelper.getJakartaResponse()).getResponse());
+ }
+
+ @SuppressWarnings("deprecation")
+ @Test
+ public void testJakartaGetRequestResponseCross3Wrap() {
+ final SlingHttpServletRequest req1 =
Mockito.mock(SlingHttpServletRequest.class);
+ final SlingJakartaHttpServletRequest req2 =
JavaxToJakartaRequestWrapper.toJakartaRequest(req1);
+ final SlingHttpServletRequest req3 =
JakartaToJavaxRequestWrapper.toJavaxRequest(req2);
+ final SlingJakartaHttpServletRequest req4 =
JavaxToJakartaRequestWrapper.toJakartaRequest(req3);
+ final SlingJakartaHttpServletRequest request = new
SlingJakartaHttpServletRequestWrapper(req4);
+ final SlingHttpServletResponse res1 =
Mockito.mock(SlingHttpServletResponse.class);
+ final SlingJakartaHttpServletResponse res2 =
JavaxToJakartaResponseWrapper.toJakartaResponse(res1);
+ final SlingHttpServletResponse res3 =
JakartaToJavaxResponseWrapper.toJavaxResponse(res2);
+ final SlingJakartaHttpServletResponse res4 =
JavaxToJakartaResponseWrapper.toJakartaResponse(res3);
+ final SlingJakartaHttpServletResponse response = new
SlingJakartaHttpServletResponseWrapper(res4);
+
+ final ScriptHelper scriptHelper = new
ScriptHelper(sling.bundleContext(), null, request, response);
+
+ assertNotNull(scriptHelper.getJakartaRequest());
+ assertTrue(scriptHelper.getJakartaRequest() instanceof
OnDemandReaderJakartaRequest);
+ assertSame(request, ((OnDemandReaderJakartaRequest)
scriptHelper.getJakartaRequest()).getRequest());
+
+ assertNotNull(scriptHelper.getRequest());
+ assertTrue(scriptHelper.getRequest() instanceof
JakartaToJavaxRequestWrapper);
+ assertSame(
+ scriptHelper.getJakartaRequest(),
+ ((JakartaToJavaxRequestWrapper)
scriptHelper.getRequest()).getRequest());
+
+ assertNotNull(scriptHelper.getJakartaResponse());
+ assertTrue(scriptHelper.getJakartaResponse() instanceof
OnDemandWriterJakartaResponse);
+ assertSame(response, ((OnDemandWriterJakartaResponse)
scriptHelper.getJakartaResponse()).getResponse());
+
+ assertNotNull(scriptHelper.getResponse());
+ assertTrue(scriptHelper.getResponse() instanceof
JakartaToJavaxResponseWrapper);
+ assertSame(
+ scriptHelper.getJakartaResponse(),
+ ((JakartaToJavaxResponseWrapper)
scriptHelper.getResponse()).getResponse());
+ }
+
+ @SuppressWarnings("deprecation")
+ @Test
+ public void testGetRequestResponseCross3Wrap() {
+ final SlingJakartaHttpServletRequest req1 =
Mockito.mock(SlingJakartaHttpServletRequest.class);
+ final SlingHttpServletRequest req2 =
JakartaToJavaxRequestWrapper.toJavaxRequest(req1);
+ final SlingJakartaHttpServletRequest req3 =
JavaxToJakartaRequestWrapper.toJakartaRequest(req2);
+ final SlingHttpServletRequest req4 =
JakartaToJavaxRequestWrapper.toJavaxRequest(req3);
+ final SlingHttpServletRequest request = new
SlingHttpServletRequestWrapper(req4);
+ final SlingJakartaHttpServletResponse res1 =
Mockito.mock(SlingJakartaHttpServletResponse.class);
+ final SlingHttpServletResponse res2 =
JakartaToJavaxResponseWrapper.toJavaxResponse(res1);
+ final SlingJakartaHttpServletResponse res3 =
JavaxToJakartaResponseWrapper.toJakartaResponse(res2);
+ final SlingHttpServletResponse res4 =
JakartaToJavaxResponseWrapper.toJavaxResponse(res3);
+ final SlingHttpServletResponse response = new
SlingHttpServletResponseWrapper(res4);
+
+ final ScriptHelper scriptHelper = new
ScriptHelper(sling.bundleContext(), null, request, response);
+
+ assertNotNull(scriptHelper.getRequest());
+ assertTrue(scriptHelper.getRequest() instanceof OnDemandReaderRequest);
+ assertSame(request, ((OnDemandReaderRequest)
scriptHelper.getRequest()).getRequest());
+
+ assertNotNull(scriptHelper.getJakartaRequest());
+ assertTrue(scriptHelper.getJakartaRequest() instanceof
JavaxToJakartaRequestWrapper);
+ assertSame(
+ scriptHelper.getRequest(),
+ ((JavaxToJakartaRequestWrapper)
scriptHelper.getJakartaRequest()).getRequest());
+
+ assertNotNull(scriptHelper.getResponse());
+ assertTrue(scriptHelper.getResponse() instanceof
OnDemandWriterResponse);
+ assertSame(response, ((OnDemandWriterResponse)
scriptHelper.getResponse()).getResponse());
+
+ assertNotNull(scriptHelper.getJakartaResponse());
+ assertTrue(scriptHelper.getJakartaResponse() instanceof
JavaxToJakartaResponseWrapper);
+ assertSame(
+ scriptHelper.getResponse(),
+ ((JavaxToJakartaResponseWrapper)
scriptHelper.getJakartaResponse()).getResponse());
+ }
}