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 df16b71  SLING-12607 : Implement Jakarta Servlet based Sling API
df16b71 is described below

commit df16b71aea179011b4a7b317e61aa43925cd02a8
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Mon Jun 9 12:05:58 2025 +0200

    SLING-12607 : Implement Jakarta Servlet based Sling API
---
 pom.xml                                            |  6 +--
 .../impl/parameters/MultipartRequestParameter.java |  2 +-
 .../engine/impl/parameters/ParameterSupport.java   | 62 +++++++++++++---------
 .../impl/parameters/RequestPartsIterator.java      | 27 +++++-----
 .../sling/engine/impl/parameters/SlingPart.java    |  6 +--
 5 files changed, 56 insertions(+), 47 deletions(-)

diff --git a/pom.xml b/pom.xml
index b0763a0..14def43 100644
--- a/pom.xml
+++ b/pom.xml
@@ -138,9 +138,9 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-fileupload2-jakarta-servlet5</artifactId>
-            <version>2.0.0-M2</version>
+            <groupId>commons-fileupload</groupId>
+            <artifactId>commons-fileupload</artifactId>
+            <version>1.6.0</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
diff --git 
a/src/main/java/org/apache/sling/engine/impl/parameters/MultipartRequestParameter.java
 
b/src/main/java/org/apache/sling/engine/impl/parameters/MultipartRequestParameter.java
index 2177977..46d448d 100644
--- 
a/src/main/java/org/apache/sling/engine/impl/parameters/MultipartRequestParameter.java
+++ 
b/src/main/java/org/apache/sling/engine/impl/parameters/MultipartRequestParameter.java
@@ -22,7 +22,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
 
-import org.apache.commons.fileupload2.core.DiskFileItem;
+import org.apache.commons.fileupload.disk.DiskFileItem;
 
 /**
  * The <code>MultipartRequestParameter</code> represents a request parameter
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 32c8100..967b9ff 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
@@ -32,13 +32,11 @@ import java.util.Map;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletRequestWrapper;
 import jakarta.servlet.http.HttpServletResponse;
-import org.apache.commons.fileupload2.core.DiskFileItem;
-import org.apache.commons.fileupload2.core.DiskFileItemFactory;
-import org.apache.commons.fileupload2.core.FileUploadException;
-import org.apache.commons.fileupload2.core.RequestContext;
-import 
org.apache.commons.fileupload2.jakarta.servlet5.JakartaServletDiskFileUpload;
-import 
org.apache.commons.fileupload2.jakarta.servlet5.JakartaServletFileUpload;
-import 
org.apache.commons.fileupload2.jakarta.servlet5.JakartaServletRequestContext;
+import org.apache.commons.fileupload.FileUploadException;
+import org.apache.commons.fileupload.RequestContext;
+import org.apache.commons.fileupload.disk.DiskFileItem;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.apache.commons.fileupload.servlet.ServletFileUpload;
 import org.apache.sling.api.request.RequestParameter;
 import org.apache.sling.api.request.RequestParameterMap;
 import org.apache.sling.api.resource.ResourceResolver;
@@ -303,18 +301,17 @@ public class ParameterSupport {
                 }
 
                 // Multipart POST
-                if (JakartaServletFileUpload.isMultipartContent(
-                        new 
JakartaServletRequestContext(this.getServletRequest()))) {
+                if 
(ServletFileUpload.isMultipartContent(this.getMultiPartContext())) {
                     if (isStreamed(parameters, this.getServletRequest())) {
                         // special case, the request is Multipart and streamed 
processing has been requested
                         try {
                             this.getServletRequest()
                                     .setAttribute(
                                             REQUEST_PARTS_ITERATOR_ATTRIBUTE,
-                                            new 
RequestPartsIterator(this.getServletRequest()));
+                                            new 
RequestPartsIterator(this.getMultiPartContext()));
                             this.log.debug(
                                     "getRequestParameterMapInternal: 
Iterator<javax.servlet.http.Part> available as request attribute named 
request-parts-iterator");
-                        } catch (IOException e) {
+                        } catch (final FileUploadException | IOException e) {
                             this.log.error(
                                     "getRequestParameterMapInternal: Error 
parsing multipart streamed request", e);
                         }
@@ -393,25 +390,40 @@ public class ParameterSupport {
         return false;
     }
 
-    private void parseMultiPartPost(ParameterMap parameters) {
-        // Create a new file upload handler
-        final JakartaServletDiskFileUpload upload = new 
JakartaServletDiskFileUpload();
-        upload.setSizeMax(ParameterSupport.maxRequestSize);
-        upload.setFileSizeMax(ParameterSupport.maxFileSize);
-        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()) {
+    private RequestContext getMultiPartContext() {
+        return new RequestContext() {
             @Override
             public String getCharacterEncoding() {
-                String enc = super.getCharacterEncoding();
+                String enc = getServletRequest().getCharacterEncoding();
                 return (enc != null) ? enc : Util.ENCODING_DIRECT;
             }
+
+            @Override
+            public int getContentLength() {
+                return getServletRequest().getContentLength();
+            }
+
+            @Override
+            public String getContentType() {
+                return getServletRequest().getContentType();
+            }
+
+            @Override
+            public InputStream getInputStream() throws IOException {
+                return getServletRequest().getInputStream();
+            }
         };
+    }
+
+    private void parseMultiPartPost(ParameterMap parameters) {
+        // Create a new file upload handler
+        ServletFileUpload upload = new ServletFileUpload();
+        upload.setSizeMax(ParameterSupport.maxRequestSize);
+        upload.setFileSizeMax(ParameterSupport.maxFileSize);
+        upload.setFileItemFactory(
+                new DiskFileItemFactory(ParameterSupport.fileSizeThreshold, 
ParameterSupport.location));
+        upload.setFileCountMax(ParameterSupport.maxFileCount);
+        final RequestContext rc = this.getMultiPartContext();
 
         // Parse the request
         List<?> /* FileItem */ items = null;
diff --git 
a/src/main/java/org/apache/sling/engine/impl/parameters/RequestPartsIterator.java
 
b/src/main/java/org/apache/sling/engine/impl/parameters/RequestPartsIterator.java
index 99d27e5..c758d77 100644
--- 
a/src/main/java/org/apache/sling/engine/impl/parameters/RequestPartsIterator.java
+++ 
b/src/main/java/org/apache/sling/engine/impl/parameters/RequestPartsIterator.java
@@ -26,11 +26,12 @@ import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 
-import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.Part;
-import org.apache.commons.fileupload2.core.FileItemInput;
-import org.apache.commons.fileupload2.core.FileItemInputIterator;
-import 
org.apache.commons.fileupload2.jakarta.servlet5.JakartaServletDiskFileUpload;
+import org.apache.commons.fileupload.FileItemIterator;
+import org.apache.commons.fileupload.FileItemStream;
+import org.apache.commons.fileupload.FileUpload;
+import org.apache.commons.fileupload.FileUploadException;
+import org.apache.commons.fileupload.RequestContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -41,7 +42,7 @@ public class RequestPartsIterator implements Iterator<Part> {
     private static final Logger LOG = 
LoggerFactory.getLogger(RequestPartsIterator.class);
 
     /** The CommonsFile Upload streaming API iterator */
-    private final FileItemInputIterator itemIterator;
+    private final FileItemIterator itemIterator;
 
     /**
      * Create and initialse the iterator using the request. The request must 
be fresh. Headers can have been read but the stream
@@ -50,17 +51,17 @@ public class RequestPartsIterator implements Iterator<Part> 
{
      * @throws IOException when there is a problem reading the request.
      * @throws FileUploadException when there is a problem parsing the request.
      */
-    public RequestPartsIterator(HttpServletRequest servletRequest) throws 
IOException {
-        JakartaServletDiskFileUpload upload = new 
JakartaServletDiskFileUpload();
+    public RequestPartsIterator(final RequestContext context) throws 
FileUploadException, IOException {
+        FileUpload upload = new FileUpload();
         upload.setFileCountMax(50);
-        itemIterator = upload.getItemIterator(servletRequest);
+        itemIterator = upload.getItemIterator(context);
     }
 
     @Override
     public boolean hasNext() {
         try {
             return itemIterator.hasNext();
-        } catch (IOException e) {
+        } catch (final FileUploadException | IOException e) {
             LOG.error("hasNext Item failed cause:" + e.getMessage(), e);
         }
         return false;
@@ -70,7 +71,7 @@ public class RequestPartsIterator implements Iterator<Part> {
     public Part next() {
         try {
             return new StreamedRequestPart(itemIterator.next());
-        } catch (IOException e) {
+        } catch (final FileUploadException | IOException e) {
             LOG.error("next Item failed cause:" + e.getMessage(), e);
         }
         return null;
@@ -85,12 +86,12 @@ public class RequestPartsIterator implements Iterator<Part> 
{
      * Internal implementation of the Part API from Servlet 3 wrapping the 
Commons File Upload FIleItemStream object.
      */
     private static class StreamedRequestPart implements Part {
-        private final FileItemInput fileItem;
+        private final FileItemStream fileItem;
         private final InputStream inputStream;
 
-        public StreamedRequestPart(FileItemInput fileItem) throws IOException {
+        public StreamedRequestPart(final FileItemStream fileItem) throws 
IOException {
             this.fileItem = fileItem;
-            inputStream = fileItem.getInputStream();
+            inputStream = fileItem.openStream();
         }
 
         @Override
diff --git 
a/src/main/java/org/apache/sling/engine/impl/parameters/SlingPart.java 
b/src/main/java/org/apache/sling/engine/impl/parameters/SlingPart.java
index 5956243..bf53bcd 100644
--- a/src/main/java/org/apache/sling/engine/impl/parameters/SlingPart.java
+++ b/src/main/java/org/apache/sling/engine/impl/parameters/SlingPart.java
@@ -61,11 +61,7 @@ public class SlingPart implements Part {
 
     @Override
     public void delete() {
-        try {
-            this.param.getFileItem().delete();
-        } catch (final IOException e) {
-            // ignore, nothing we can do
-        }
+        this.param.getFileItem().delete();
     }
 
     @Override

Reply via email to