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-engine.git


The following commit(s) were added to refs/heads/master by this push:
     new af7a9aa  SLING-12607 : Implement Jakarta Servlet based Sling API
af7a9aa is described below

commit af7a9aa1e2e10fc50401d0a045ab512ef38fe51e
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Fri May 30 07:07:07 2025 +0200

    SLING-12607 : Implement Jakarta Servlet based Sling API
---
 .../sling/engine/impl/DefaultErrorHandler.java     |  1 +
 .../impl/SlingJakartaHttpServletRequestImpl.java   |  2 +
 .../impl/SlingJakartaHttpServletResponseImpl.java  |  1 -
 .../engine/impl/SlingRequestProcessorImpl.java     |  2 +
 .../impl/adapter/EngineErrorHandlerTracker.java    |  1 +
 .../engine/impl/filter/ServletFilterManager.java   |  1 +
 .../engine/impl/helper/RequestListenerManager.java |  2 +
 .../engine/impl/log/RequestLogServiceFacade.java   |  1 +
 .../sling/engine/impl/log/RequestLoggerFilter.java |  1 +
 .../engine/impl/log/RequestLoggerService.java      |  4 ++
 .../engine/impl/parameters/ParameterSupport.java   | 13 ++--
 .../sling/engine/impl/request/RequestData.java     | 79 +++++++++++++++++++---
 .../org/apache/sling/engine/ResponseUtilTest.java  | 13 +++-
 13 files changed, 102 insertions(+), 19 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/engine/impl/DefaultErrorHandler.java 
b/src/main/java/org/apache/sling/engine/impl/DefaultErrorHandler.java
index 73f0ebd..8320bf2 100644
--- a/src/main/java/org/apache/sling/engine/impl/DefaultErrorHandler.java
+++ b/src/main/java/org/apache/sling/engine/impl/DefaultErrorHandler.java
@@ -63,6 +63,7 @@ public class DefaultErrorHandler implements 
JakartaErrorHandler {
         this.serverInfo = (serverInfo != null) ? serverInfo : 
ProductInfoProvider.PRODUCT_NAME;
     }
 
+    @SuppressWarnings("deprecation")
     public synchronized void setDelegate(final ServiceReference<?> ref, final 
ErrorHandler eh) {
         if (eh != null) {
             this.errorHandler = new JakartaErrorHandler() {
diff --git 
a/src/main/java/org/apache/sling/engine/impl/SlingJakartaHttpServletRequestImpl.java
 
b/src/main/java/org/apache/sling/engine/impl/SlingJakartaHttpServletRequestImpl.java
index f4a0a77..a187fd3 100644
--- 
a/src/main/java/org/apache/sling/engine/impl/SlingJakartaHttpServletRequestImpl.java
+++ 
b/src/main/java/org/apache/sling/engine/impl/SlingJakartaHttpServletRequestImpl.java
@@ -77,6 +77,7 @@ public class SlingJakartaHttpServletRequestImpl extends 
HttpServletRequestWrappe
     private static final List<String> FORWARD_ATTRIBUTES = Arrays.asList(
             FORWARD_CONTEXT_PATH, FORWARD_PATH_INFO, FORWARD_QUERY_STRING, 
FORWARD_REQUEST_URI, FORWARD_SERVLET_PATH);
 
+    @SuppressWarnings("deprecation")
     private static final List<String> INCLUDE_ATTRIBUTES = Arrays.asList(
             SlingConstants.ATTR_REQUEST_CONTENT,
             SlingConstants.ATTR_REQUEST_SERVLET,
@@ -398,6 +399,7 @@ public class SlingJakartaHttpServletRequestImpl extends 
HttpServletRequestWrappe
 
     // ---------- Attribute handling -----------------------------------
 
+    @SuppressWarnings("deprecation")
     @Override
     public Object getAttribute(final String name) {
         final DispatchingInfo dispatchingInfo = 
this.requestData.getDispatchingInfo();
diff --git 
a/src/main/java/org/apache/sling/engine/impl/SlingJakartaHttpServletResponseImpl.java
 
b/src/main/java/org/apache/sling/engine/impl/SlingJakartaHttpServletResponseImpl.java
index b9e7b11..763f5fa 100644
--- 
a/src/main/java/org/apache/sling/engine/impl/SlingJakartaHttpServletResponseImpl.java
+++ 
b/src/main/java/org/apache/sling/engine/impl/SlingJakartaHttpServletResponseImpl.java
@@ -40,7 +40,6 @@ import jakarta.servlet.http.HttpServletResponse;
 import jakarta.servlet.http.HttpServletResponseWrapper;
 import org.apache.sling.api.SlingException;
 import org.apache.sling.api.SlingJakartaHttpServletResponse;
-import 
org.apache.sling.engine.impl.SlingJakartaHttpServletResponseImpl.WriterAlreadyClosedException;
 import org.apache.sling.engine.impl.request.RequestData;
 import org.jetbrains.annotations.Nullable;
 import org.slf4j.Logger;
diff --git 
a/src/main/java/org/apache/sling/engine/impl/SlingRequestProcessorImpl.java 
b/src/main/java/org/apache/sling/engine/impl/SlingRequestProcessorImpl.java
index 4c7cd08..905e139 100644
--- a/src/main/java/org/apache/sling/engine/impl/SlingRequestProcessorImpl.java
+++ b/src/main/java/org/apache/sling/engine/impl/SlingRequestProcessorImpl.java
@@ -175,6 +175,7 @@ public class SlingRequestProcessorImpl implements 
SlingRequestProcessor {
         this.errorHandler.setDelegate(ref, (JakartaErrorHandler) null);
     }
 
+    @SuppressWarnings("deprecation")
     @Reference(
             name = "ErrorHandler",
             cardinality = ReferenceCardinality.OPTIONAL,
@@ -184,6 +185,7 @@ public class SlingRequestProcessorImpl implements 
SlingRequestProcessor {
         this.errorHandler.setDelegate(ref, handler);
     }
 
+    @SuppressWarnings("deprecation")
     void unsetErrorHandler(final ErrorHandler handler, final 
ServiceReference<?> ref) {
         this.errorHandler.setDelegate(ref, (ErrorHandler) null);
     }
diff --git 
a/src/main/java/org/apache/sling/engine/impl/adapter/EngineErrorHandlerTracker.java
 
b/src/main/java/org/apache/sling/engine/impl/adapter/EngineErrorHandlerTracker.java
index e53f45b..b19f121 100644
--- 
a/src/main/java/org/apache/sling/engine/impl/adapter/EngineErrorHandlerTracker.java
+++ 
b/src/main/java/org/apache/sling/engine/impl/adapter/EngineErrorHandlerTracker.java
@@ -32,6 +32,7 @@ import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.component.annotations.ReferenceCardinality;
 import org.osgi.service.component.annotations.ReferencePolicy;
 
+@Deprecated
 @Component
 public class EngineErrorHandlerTracker {
 
diff --git 
a/src/main/java/org/apache/sling/engine/impl/filter/ServletFilterManager.java 
b/src/main/java/org/apache/sling/engine/impl/filter/ServletFilterManager.java
index cd33633..22e59f0 100644
--- 
a/src/main/java/org/apache/sling/engine/impl/filter/ServletFilterManager.java
+++ 
b/src/main/java/org/apache/sling/engine/impl/filter/ServletFilterManager.java
@@ -151,6 +151,7 @@ public class ServletFilterManager {
         destroyFilter(reference, service);
     }
 
+    @SuppressWarnings("deprecation")
     @Reference(
             service = javax.servlet.Filter.class,
             updated = "updatedJavaxFilter",
diff --git 
a/src/main/java/org/apache/sling/engine/impl/helper/RequestListenerManager.java 
b/src/main/java/org/apache/sling/engine/impl/helper/RequestListenerManager.java
index 357fe2e..4ccc28a 100644
--- 
a/src/main/java/org/apache/sling/engine/impl/helper/RequestListenerManager.java
+++ 
b/src/main/java/org/apache/sling/engine/impl/helper/RequestListenerManager.java
@@ -53,6 +53,7 @@ public class RequestListenerManager {
             cardinality = ReferenceCardinality.MULTIPLE,
             policy = ReferencePolicy.DYNAMIC,
             fieldOption = FieldOption.REPLACE)
+    @SuppressWarnings("deprecation")
     private volatile List<SlingRequestListener> listeners;
 
     @Reference(
@@ -68,6 +69,7 @@ public class RequestListenerManager {
         this.servletContext = servletContext;
     }
 
+    @SuppressWarnings("deprecation")
     public void sendEvent(final HttpServletRequest request, final 
SlingJakartaRequestEvent.EventType type) {
         final List<SlingJakartaRequestListener> local = jakartaListeners;
         if (local != null && !local.isEmpty()) {
diff --git 
a/src/main/java/org/apache/sling/engine/impl/log/RequestLogServiceFacade.java 
b/src/main/java/org/apache/sling/engine/impl/log/RequestLogServiceFacade.java
index 3c723bf..fac063d 100644
--- 
a/src/main/java/org/apache/sling/engine/impl/log/RequestLogServiceFacade.java
+++ 
b/src/main/java/org/apache/sling/engine/impl/log/RequestLogServiceFacade.java
@@ -40,6 +40,7 @@ import org.osgi.util.tracker.ServiceTracker;
  * values, if multi-valued) must be the service name.</li>
  * </ol>
  */
+@SuppressWarnings("deprecation")
 class RequestLogServiceFacade implements RequestLog {
 
     // The service tracker used to access the service(s)
diff --git 
a/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerFilter.java 
b/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerFilter.java
index aba341a..0f6f9bd 100644
--- a/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerFilter.java
+++ b/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerFilter.java
@@ -75,6 +75,7 @@ public final class RequestLoggerFilter implements Filter {
         }
     }
 
+    @SuppressWarnings("deprecation")
     @Override
     public void destroy() {
         FileRequestLog.dispose();
diff --git 
a/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerService.java 
b/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerService.java
index c5cdd92..2f77fc0 100644
--- a/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerService.java
+++ b/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerService.java
@@ -101,6 +101,7 @@ public class RequestLoggerService {
 
     private CustomLogFormat logFormat;
 
+    @SuppressWarnings("deprecation")
     private RequestLog log;
 
     /**
@@ -130,6 +131,7 @@ public class RequestLoggerService {
         }
     }
 
+    @SuppressWarnings("deprecation")
     @Deactivate
     void shutdown() {
         if (this.log != null) {
@@ -140,6 +142,7 @@ public class RequestLoggerService {
         this.logFormat = null;
     }
 
+    @SuppressWarnings("deprecation")
     void log(RequestLoggerRequest request, RequestLoggerResponse response) {
         if (this.log != null && this.logFormat != null) {
             this.log.write(this.logFormat.format(request, response));
@@ -150,6 +153,7 @@ public class RequestLoggerService {
         return this.onEntry;
     }
 
+    @SuppressWarnings("deprecation")
     private RequestLog getLog(BundleContext bundleContext, String output, int 
outputType) {
         switch (outputType) {
             case OUTPUT_TYPE_FILE:
diff --git 
a/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java 
b/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java
index 05e3daa..32c8100 100644
--- 
a/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java
+++ 
b/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java
@@ -394,15 +394,16 @@ public class ParameterSupport {
     }
 
     private void parseMultiPartPost(ParameterMap parameters) {
-
         // Create a new file upload handler
-        JakartaServletDiskFileUpload upload = new 
JakartaServletDiskFileUpload();
+        final JakartaServletDiskFileUpload upload = new 
JakartaServletDiskFileUpload();
         upload.setSizeMax(ParameterSupport.maxRequestSize);
         upload.setFileSizeMax(ParameterSupport.maxFileSize);
-        upload.setFileItemFactory(DiskFileItemFactory.builder()
-                .setBufferSize(ParameterSupport.fileSizeThreshold)
-                .setPath(ParameterSupport.location.toPath())
-                .get());
+        final DiskFileItemFactory.Builder fileItemFactoryBuilder = 
DiskFileItemFactory.builder();
+        
fileItemFactoryBuilder.setBufferSize(ParameterSupport.fileSizeThreshold);
+        if (ParameterSupport.location != null) {
+            fileItemFactoryBuilder.setPath(ParameterSupport.location.toPath());
+        }
+        upload.setFileItemFactory(fileItemFactoryBuilder.get());
         upload.setFileCountMax(ParameterSupport.maxFileCount);
         RequestContext rc = new 
JakartaServletRequestContext(this.getServletRequest()) {
             @Override
diff --git 
a/src/main/java/org/apache/sling/engine/impl/request/RequestData.java 
b/src/main/java/org/apache/sling/engine/impl/request/RequestData.java
index 774d853..ab64350 100644
--- a/src/main/java/org/apache/sling/engine/impl/request/RequestData.java
+++ b/src/main/java/org/apache/sling/engine/impl/request/RequestData.java
@@ -49,8 +49,6 @@ import org.apache.sling.api.request.builder.Builders;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.servlets.ServletResolver;
-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.SlingJakartaHttpServletRequestWrapper;
@@ -300,6 +298,7 @@ public class RequestData {
      *             <code>ServletRequestWrapper</code> wrapping a
      *             <code>SlingJakartaHttpServletRequest</code>.
      */
+    @SuppressWarnings("deprecation")
     public static SlingJakartaHttpServletRequest unwrap(ServletRequest 
request) {
 
         // early check for most cases
@@ -316,6 +315,33 @@ public class RequestData {
                 return (SlingJakartaHttpServletRequest) request;
             }
         }
+        // javax to jakarta wrapper?
+        if (request instanceof 
org.apache.felix.http.jakartawrappers.HttpServletRequestWrapper) {
+            javax.servlet.ServletRequest req =
+                    
((org.apache.felix.http.jakartawrappers.HttpServletRequestWrapper) 
request).getRequest();
+            while (req instanceof javax.servlet.ServletRequestWrapper) {
+                req = ((javax.servlet.ServletRequestWrapper) req).getRequest();
+            }
+            if (req instanceof 
org.apache.felix.http.javaxwrappers.HttpServletRequestWrapper) {
+                return 
unwrap(((org.apache.felix.http.javaxwrappers.HttpServletRequestWrapper) 
req).getRequest());
+            }
+            // check for usage of builder
+            if (req instanceof SlingHttpServletRequest) {
+                // we start again at the top javax request
+                req = 
((org.apache.felix.http.jakartawrappers.HttpServletRequestWrapper) 
request).getRequest();
+                do {
+                    if (req instanceof SlingHttpServletRequest) {
+                        return 
JavaxToJakartaRequestWrapper.toJakartaRequest((SlingHttpServletRequest) req);
+                    }
+                    if (req instanceof javax.servlet.ServletRequestWrapper) {
+                        req = ((javax.servlet.ServletRequestWrapper) 
req).getRequest();
+                    } else {
+                        req = null;
+                    }
+                } while (req != null);
+            }
+            throw new IllegalArgumentException("ServletRequest not wrapping 
SlingJakartaHttpServletRequest: " + req);
+        }
 
         // if we unwrapped everything and did not find a
         // SlingJakartaHttpServletRequest, we lost
@@ -338,13 +364,15 @@ public class RequestData {
         }
 
         // javax to jakarta wrapper?
-        if (request instanceof JavaxToJakartaRequestWrapper) {
-            javax.servlet.ServletRequest req = ((JavaxToJakartaRequestWrapper) 
request).getRequest();
+        if (request instanceof 
org.apache.felix.http.jakartawrappers.HttpServletRequestWrapper) {
+            javax.servlet.ServletRequest req =
+                    
((org.apache.felix.http.jakartawrappers.HttpServletRequestWrapper) 
request).getRequest();
             while (req instanceof javax.servlet.ServletRequestWrapper) {
                 req = ((javax.servlet.ServletRequestWrapper) req).getRequest();
             }
-            if (req instanceof JakartaToJavaxRequestWrapper) {
-                final ServletRequest r = ((JakartaToJavaxRequestWrapper) 
req).getRequest();
+            if (req instanceof 
org.apache.felix.http.javaxwrappers.HttpServletRequestWrapper) {
+                final ServletRequest r =
+                        
((org.apache.felix.http.javaxwrappers.HttpServletRequestWrapper) 
req).getRequest();
                 if (r instanceof SlingJakartaHttpServletRequest) {
                     return unwrap((SlingJakartaHttpServletRequest) r);
                 }
@@ -369,6 +397,7 @@ public class RequestData {
      *             <code>ServletResponseWrapper</code> wrapping a
      *             <code>SlingJakartaHttpServletResponse</code>.
      */
+    @SuppressWarnings("deprecation")
     public static SlingJakartaHttpServletResponse unwrap(ServletResponse 
response) {
 
         // early check for most cases
@@ -386,6 +415,34 @@ public class RequestData {
             }
         }
 
+        // javax to jakarta wrapper?
+        if (response instanceof 
org.apache.felix.http.jakartawrappers.HttpServletResponseWrapper) {
+            javax.servlet.ServletResponse res =
+                    
((org.apache.felix.http.jakartawrappers.HttpServletResponseWrapper) 
response).getResponse();
+            while (res instanceof javax.servlet.ServletResponseWrapper) {
+                res = ((javax.servlet.ServletResponseWrapper) 
res).getResponse();
+            }
+            if (res instanceof 
org.apache.felix.http.javaxwrappers.HttpServletResponseWrapper) {
+                return 
unwrap(((org.apache.felix.http.javaxwrappers.HttpServletResponseWrapper) 
res).getResponse());
+            }
+            // check for usage of builder
+            if (res instanceof SlingHttpServletResponse) {
+                // we start again at the top javax response
+                res = 
((org.apache.felix.http.jakartawrappers.HttpServletResponseWrapper) 
response).getResponse();
+                do {
+                    if (res instanceof SlingHttpServletResponse) {
+                        return 
JavaxToJakartaResponseWrapper.toJakartaResponse((SlingHttpServletResponse) res);
+                    }
+                    if (res instanceof javax.servlet.ServletResponseWrapper) {
+                        res = ((javax.servlet.ServletResponseWrapper) 
res).getResponse();
+                    } else {
+                        res = null;
+                    }
+                } while (res != null);
+            }
+            throw new IllegalArgumentException("ServletResponse not wrapping 
SlingJakartaHttpServletResponse: " + res);
+        }
+
         // if we unwrapped everything and did not find a
         // SlingJakartaHttpServletResponse, we lost
         throw new IllegalArgumentException("ServletResponse not wrapping 
SlingJakartaHttpServletResponse: " + response);
@@ -407,13 +464,15 @@ public class RequestData {
         }
 
         // javax to jakarta wrapper?
-        if (response instanceof JavaxToJakartaResponseWrapper) {
-            javax.servlet.ServletResponse res = 
((JavaxToJakartaResponseWrapper) response).getResponse();
+        if (response instanceof 
org.apache.felix.http.jakartawrappers.HttpServletResponseWrapper) {
+            javax.servlet.ServletResponse res =
+                    
((org.apache.felix.http.jakartawrappers.HttpServletResponseWrapper) 
response).getResponse();
             while (res instanceof javax.servlet.ServletResponseWrapper) {
                 res = ((javax.servlet.ServletResponseWrapper) 
res).getResponse();
             }
-            if (res instanceof JakartaToJavaxResponseWrapper) {
-                final ServletResponse r = ((JakartaToJavaxResponseWrapper) 
res).getResponse();
+            if (res instanceof 
org.apache.felix.http.javaxwrappers.HttpServletResponseWrapper) {
+                final ServletResponse r =
+                        
((org.apache.felix.http.javaxwrappers.HttpServletResponseWrapper) 
res).getResponse();
                 if (r instanceof SlingJakartaHttpServletResponse) {
                     return unwrap((SlingJakartaHttpServletResponse) r);
                 }
diff --git a/src/test/java/org/apache/sling/engine/ResponseUtilTest.java 
b/src/test/java/org/apache/sling/engine/ResponseUtilTest.java
index 09f9c1a..849eb86 100644
--- a/src/test/java/org/apache/sling/engine/ResponseUtilTest.java
+++ b/src/test/java/org/apache/sling/engine/ResponseUtilTest.java
@@ -22,23 +22,32 @@ import java.io.IOException;
 import java.io.StringWriter;
 import java.io.Writer;
 
-import junit.framework.TestCase;
+import org.junit.Test;
 
-public class ResponseUtilTest extends TestCase {
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+@SuppressWarnings("deprecation")
+public class ResponseUtilTest {
+
+    @Test
     public void testNullInput() {
         assertNull(ResponseUtil.escapeXml(null));
     }
 
+    @Test
     public void testNoEscapes() {
         assertEquals("foo and bar", ResponseUtil.escapeXml("foo and bar"));
     }
 
+    @Test
     public void testEscapes() {
         assertEquals(
                 "&lt;bonnie&gt; &amp; &lt;/clyde&gt; &amp;&amp; others are 
having fun with &quot; and &apos; characters",
                 ResponseUtil.escapeXml("<bonnie> & </clyde> && others are 
having fun with \" and ' characters"));
     }
 
+    @Test
     public void testXmlEscapingWriter() throws IOException {
         final StringWriter sw = new StringWriter();
         final Writer w = ResponseUtil.getXmlEscapingWriter(sw);

Reply via email to