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-servlets-resolver.git
The following commit(s) were added to refs/heads/master by this push:
new faebb10 SLING-12643 : Support Jakarta ServletAPI in Scripting
faebb10 is described below
commit faebb10f10338aedd28de4be8658a42644c5fae0
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Sun May 25 10:08:19 2025 +0200
SLING-12643 : Support Jakarta ServletAPI in Scripting
---
.../servlets/resolver/internal/ScriptResource.java | 10 +-
.../resolver/internal/SlingScriptWrapper.java | 263 ---------------------
.../internal/console/WebConsolePlugin.java | 6 +-
.../resolver/internal/ScriptResourceTest.java | 26 --
4 files changed, 5 insertions(+), 300 deletions(-)
diff --git
a/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResource.java
b/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResource.java
index 604f70f..a05eb0b 100644
---
a/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResource.java
+++
b/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResource.java
@@ -29,7 +29,6 @@ import org.apache.sling.api.resource.ResourceMetadata;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.resource.ResourceWrapper;
-import org.apache.sling.api.scripting.SlingJakartaScript;
import org.apache.sling.api.scripting.SlingScript;
import org.apache.sling.servlets.resolver.internal.resource.ServletResource;
@@ -102,7 +101,6 @@ public class ScriptResource extends AbstractResource {
/**
* @see
org.apache.sling.api.adapter.SlingAdaptable#adaptTo(java.lang.Class)
*/
- @SuppressWarnings({"unchecked", "deprecation"})
@Override
public <T> T adaptTo(final Class<T> type) {
if (type == javax.servlet.Servlet.class) {
@@ -135,15 +133,11 @@ public class ScriptResource extends AbstractResource {
return (T) ServletWrapperUtil.toJakartaServlet(sx);
}
}
- } else if (type == SlingJakartaScript.class) {
- final SlingJakartaScript s = (SlingJakartaScript)
super.adaptTo(type);
+ } else if (type == SlingScript.class) {
+ final SlingScript s = (SlingScript) super.adaptTo(type);
if (s != null) {
return (T) s;
}
- final SlingScript legacy = (SlingScript)
super.adaptTo(SlingScript.class);
- if (legacy != null) {
- return (T) new SlingScriptWrapper(legacy);
- }
} else if (type == SlingScript.class) {
final SlingScript s = (SlingScript) super.adaptTo(type);
if (s != null) {
diff --git
a/src/main/java/org/apache/sling/servlets/resolver/internal/SlingScriptWrapper.java
b/src/main/java/org/apache/sling/servlets/resolver/internal/SlingScriptWrapper.java
deleted file mode 100644
index a6a8ddd..0000000
---
a/src/main/java/org/apache/sling/servlets/resolver/internal/SlingScriptWrapper.java
+++ /dev/null
@@ -1,263 +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.servlets.resolver.internal;
-
-import java.io.PrintWriter;
-import java.io.Reader;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-import java.util.function.BiConsumer;
-import java.util.function.BiFunction;
-import java.util.function.Function;
-
-import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.api.SlingHttpServletResponse;
-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.SlingJakartaScript;
-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.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-import org.slf4j.Logger;
-
-/**
- * TODO - we need to figure out what the best approach to support scripts is
- */
-@Deprecated
-public class SlingScriptWrapper implements SlingJakartaScript {
-
- private final SlingScript legacy;
-
- public SlingScriptWrapper(final SlingScript legacy) {
- this.legacy = legacy;
- }
-
- @Override
- public Object call(@NotNull final SlingJakartaBindings props, @NotNull
final String method, final Object... args) {
- return this.legacy.call(new SlingBindingsWrapper(props), method, args);
- }
-
- @Override
- public Object eval(@NotNull final SlingJakartaBindings props) {
- return this.legacy.eval(new SlingBindingsWrapper(props));
- }
-
- @Override
- public @NotNull Resource getScriptResource() {
- return this.legacy.getScriptResource();
- }
-
- private static class SlingBindingsWrapper extends SlingBindings {
-
- private final SlingJakartaBindings bindings;
-
- public SlingBindingsWrapper(final SlingJakartaBindings bindings) {
- this.bindings = bindings;
- }
-
- public Object put(String key, Object value) {
- return bindings.put(key, value);
- }
-
- public void putAll(Map<? extends String, ?> toMerge) {
- bindings.putAll(toMerge);
- }
-
- public void clear() {
- bindings.clear();
- }
-
- public @NotNull Set<String> keySet() {
- return bindings.keySet();
- }
-
- public @NotNull Collection<Object> values() {
- return bindings.values();
- }
-
- public @NotNull Set<Entry<String, Object>> entrySet() {
- return bindings.entrySet();
- }
-
- public int size() {
- return bindings.size();
- }
-
- public boolean isEmpty() {
- return bindings.isEmpty();
- }
-
- public boolean containsKey(Object key) {
- return bindings.containsKey(key);
- }
-
- public Object get(Object key) {
- return bindings.get(key);
- }
-
- public Object remove(Object key) {
- return bindings.remove(key);
- }
-
- public boolean equals(Object o) {
- return bindings.equals(o);
- }
-
- public int hashCode() {
- return bindings.hashCode();
- }
-
- public Object getOrDefault(Object key, Object defaultValue) {
- return bindings.getOrDefault(key, defaultValue);
- }
-
- public void setFlush(boolean flush) {
- bindings.setFlush(flush);
- }
-
- public boolean getFlush() {
- return bindings.getFlush();
- }
-
- public void setLog(Logger log) {
- bindings.setLog(log);
- }
-
- public @Nullable Logger getLog() {
- return bindings.getLog();
- }
-
- public void setOut(PrintWriter out) {
- bindings.setOut(out);
- }
-
- public @Nullable PrintWriter getOut() {
- return bindings.getOut();
- }
-
- public void setRequest(SlingHttpServletRequest request) {
-
bindings.setRequest(JavaxToJakartaRequestWrapper.toJakartaRequest(request));
- }
-
- public @Nullable SlingHttpServletRequest getRequest() {
- return
JakartaToJavaxRequestWrapper.toJavaxRequest(bindings.getRequest());
- }
-
- public void setReader(Reader reader) {
- bindings.setReader(reader);
- }
-
- public @Nullable Reader getReader() {
- return bindings.getReader();
- }
-
- public void setResource(Resource resource) {
- bindings.setResource(resource);
- }
-
- public @Nullable Resource getResource() {
- return bindings.getResource();
- }
-
- public void setResourceResolver(ResourceResolver resourceResolver) {
- bindings.setResourceResolver(resourceResolver);
- }
-
- public @Nullable ResourceResolver getResourceResolver() {
- return bindings.getResourceResolver();
- }
-
- public void setResponse(SlingHttpServletResponse response) {
-
bindings.setResponse(JavaxToJakartaResponseWrapper.toJakartaResponse(response));
- }
-
- public @Nullable SlingHttpServletResponse getResponse() {
- return
JakartaToJavaxResponseWrapper.toJavaxResponse(bindings.getResponse());
- }
-
- public void setSling(SlingScriptHelper sling) {
- // bindings.setSling(sling);
- }
-
- public @Nullable SlingScriptHelper getSling() {
- return null; // bindings.getSling();
- }
-
- public String toString() {
- return bindings.toString();
- }
-
- public boolean containsValue(Object value) {
- return bindings.containsValue(value);
- }
-
- public Object putIfAbsent(String key, Object value) {
- return bindings.putIfAbsent(key, value);
- }
-
- public boolean remove(Object key, Object value) {
- return bindings.remove(key, value);
- }
-
- public boolean replace(String key, Object oldValue, Object newValue) {
- return bindings.replace(key, oldValue, newValue);
- }
-
- public Object replace(String key, Object value) {
- return bindings.replace(key, value);
- }
-
- public Object computeIfAbsent(String key, Function<? super String, ?
extends Object> mappingFunction) {
- return bindings.computeIfAbsent(key, mappingFunction);
- }
-
- public Object computeIfPresent(
- String key, BiFunction<? super String, ? super Object, ?
extends Object> remappingFunction) {
- return bindings.computeIfPresent(key, remappingFunction);
- }
-
- public Object compute(
- String key, BiFunction<? super String, ? super Object, ?
extends Object> remappingFunction) {
- return bindings.compute(key, remappingFunction);
- }
-
- public Object merge(
- String key,
- Object value,
- BiFunction<? super Object, ? super Object, ? extends Object>
remappingFunction) {
- return bindings.merge(key, value, remappingFunction);
- }
-
- public void forEach(BiConsumer<? super String, ? super Object> action)
{
- bindings.forEach(action);
- }
-
- public void replaceAll(BiFunction<? super String, ? super Object, ?
extends Object> function) {
- bindings.replaceAll(function);
- }
- }
-}
diff --git
a/src/main/java/org/apache/sling/servlets/resolver/internal/console/WebConsolePlugin.java
b/src/main/java/org/apache/sling/servlets/resolver/internal/console/WebConsolePlugin.java
index 63bf91f..a1d86e0 100644
---
a/src/main/java/org/apache/sling/servlets/resolver/internal/console/WebConsolePlugin.java
+++
b/src/main/java/org/apache/sling/servlets/resolver/internal/console/WebConsolePlugin.java
@@ -43,7 +43,7 @@ import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.api.resource.ResourceUtil;
-import org.apache.sling.api.scripting.SlingJakartaScript;
+import org.apache.sling.api.scripting.SlingScript;
import org.apache.sling.api.servlets.JakartaOptingServlet;
import org.apache.sling.api.uri.SlingUriBuilder;
import org.apache.sling.serviceusermapping.ServiceUserMapped;
@@ -437,8 +437,8 @@ public class WebConsolePlugin extends HttpServlet {
private String getServletDetails(Servlet servlet) {
StringBuilder details = new StringBuilder();
- if (servlet instanceof SlingJakartaScript) {
- final SlingJakartaScript script =
SlingJakartaScript.class.cast(servlet);
+ if (servlet instanceof SlingScript) {
+ final SlingScript script = SlingScript.class.cast(servlet);
details.append(Encode.forHtml(script.getScriptResource().getPath()));
details.append(" (Resource Script)");
} else {
diff --git
a/src/test/java/org/apache/sling/servlets/resolver/internal/ScriptResourceTest.java
b/src/test/java/org/apache/sling/servlets/resolver/internal/ScriptResourceTest.java
index 7124e7f..67d2ae2 100644
---
a/src/test/java/org/apache/sling/servlets/resolver/internal/ScriptResourceTest.java
+++
b/src/test/java/org/apache/sling/servlets/resolver/internal/ScriptResourceTest.java
@@ -24,7 +24,6 @@ import org.apache.sling.api.adapter.SlingAdaptable;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceWrapper;
-import org.apache.sling.api.scripting.SlingJakartaScript;
import org.apache.sling.api.scripting.SlingScript;
import org.apache.sling.servlets.resolver.internal.resource.ServletResource;
import org.junit.Test;
@@ -162,29 +161,4 @@ public class ScriptResourceTest {
SlingScript adaptedScript = scriptResource.adaptTo(SlingScript.class);
assertEquals(script, adaptedScript);
}
-
- @Test
- public void testAdaptToSlingJakartaScript() {
- final String resourcePath = "/sling/test/test.html";
- ResourceResolver perThreadRR = mock(ResourceResolver.class);
- ResourceResolver sharedRR = mock(ResourceResolver.class);
- Resource resource = mock(Resource.class);
- when(resource.getPath()).thenReturn(resourcePath);
-
- SlingJakartaScript script = mock(SlingJakartaScript.class);
-
- Resource wrappedResource = new ResourceWrapper(resource);
-
when(perThreadRR.getResource(resourcePath)).thenReturn(wrappedResource);
- when(perThreadRR.isLive()).thenReturn(true);
-
- ScriptResource scriptResource = new ScriptResource(resource, () ->
perThreadRR, sharedRR);
-
- AdapterManager adapterManager = mock(AdapterManager.class);
- when(adapterManager.getAdapter(scriptResource,
SlingJakartaScript.class))
- .thenReturn(script);
- SlingAdaptable.setAdapterManager(adapterManager);
-
- SlingJakartaScript adaptedScript =
scriptResource.adaptTo(SlingJakartaScript.class);
- assertEquals(script, adaptedScript);
- }
}