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