diff --git a/assembly/src/main/assembly/min-lib.xml b/assembly/src/main/assembly/min-lib.xml
index 3cae96356..9f85bf1a1 100644
--- a/assembly/src/main/assembly/min-lib.xml
+++ b/assembly/src/main/assembly/min-lib.xml
@@ -39,7 +39,7 @@
org.apache.commons:commons-text
org.apache.logging.log4j:log4j-api
ognl:ognl
- commons-fileupload:commons-fileupload
+ org.apache.commons:commons-fileupload2-jakarta
org.apache.commons:commons-io
diff --git a/core/pom.xml b/core/pom.xml
index 154b69254..73aee7392 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -91,7 +91,6 @@
-
build-maven
@@ -172,6 +171,7 @@
org.apache.maven.plugins
maven-source-plugin
+
@@ -214,14 +214,14 @@
- commons-fileupload
- commons-fileupload
+ org.apache.commons
+ commons-fileupload2-jakarta
+ 2.0.0-M1
commons-io
commons-io
-
org.apache.commons
commons-lang3
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java
index aaa9516f2..bdd84811e 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java
@@ -18,14 +18,15 @@
*/
package org.apache.struts2.dispatcher.multipart;
-import org.apache.commons.fileupload.FileCountLimitExceededException;
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.fileupload.FileUploadBase;
-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.commons.fileupload2.core.DiskFileItem;
+import org.apache.commons.fileupload2.core.DiskFileItemFactory;
+import org.apache.commons.fileupload2.core.FileItem;
+import org.apache.commons.fileupload2.core.FileUploadByteCountLimitException;
+import org.apache.commons.fileupload2.core.FileUploadException;
+import org.apache.commons.fileupload2.core.FileUploadFileCountLimitException;
+import org.apache.commons.fileupload2.core.FileUploadSizeException;
+import org.apache.commons.fileupload2.core.RequestContext;
+import org.apache.commons.fileupload2.jakarta.JakartaServletFileUpload;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -35,7 +36,7 @@ import jakarta.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
@@ -58,7 +59,7 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest {
protected Map> params = new HashMap<>();
/**
- * Creates a new request wrapper to handle multi-part data using methods adapted from Jason Pell's
+ * Creates a new request wrapper to handle multipart data using methods adapted from Jason Pell's
* multipart classes (see class description).
*
* @param saveDir the directory to save off the file
@@ -72,16 +73,16 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest {
} catch (FileUploadException e) {
LOG.debug("Request exceeded size limit!", e);
LocalizedMessage errorMessage;
- if (e instanceof FileUploadBase.SizeLimitExceededException) {
- FileUploadBase.SizeLimitExceededException ex = (FileUploadBase.SizeLimitExceededException) e;
- errorMessage = buildErrorMessage(e, new Object[]{ex.getPermittedSize(), ex.getActualSize()});
- } else if (e instanceof FileUploadBase.FileSizeLimitExceededException) {
- FileUploadBase.FileSizeLimitExceededException ex = (FileUploadBase.FileSizeLimitExceededException) e;
- errorMessage = buildErrorMessage(e, new Object[]{ex.getFileName(), ex.getPermittedSize(), ex.getActualSize()});
- } else if (e instanceof FileCountLimitExceededException) {
- FileCountLimitExceededException ex = (FileCountLimitExceededException) e;
- errorMessage = buildErrorMessage(e, new Object[]{ex.getLimit()});
- } else {
+ if (e instanceof FileUploadByteCountLimitException) {
+ FileUploadByteCountLimitException ex = (FileUploadByteCountLimitException) e;
+ errorMessage = buildErrorMessage(e, new Object[]{ex.getFileName(), ex.getPermitted(), ex.getActualSize()});
+ } else if (e instanceof FileUploadFileCountLimitException) {
+ FileUploadFileCountLimitException ex = (FileUploadFileCountLimitException) e;
+ errorMessage = buildErrorMessage(e, new Object[]{ex.getPermitted()});
+ } else if (e instanceof FileUploadSizeException) {
+ FileUploadSizeException ex = (FileUploadSizeException) e;
+ errorMessage = buildErrorMessage(e, new Object[]{ex.getPermitted(), ex.getActualSize()});
+ } else {
errorMessage = buildErrorMessage(e, new Object[]{});
}
@@ -97,10 +98,9 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest {
}
}
- protected void processUpload(HttpServletRequest request, String saveDir) throws FileUploadException, UnsupportedEncodingException {
- //TODO: commons-upload upgrade
+ protected void processUpload(HttpServletRequest request, String saveDir) throws IOException {
- /* if (ServletFileUpload.isMultipartContent(request)) {
+ if (JakartaServletFileUpload.isMultipartContent(request)) {
for (FileItem item : parseRequest(request, saveDir)) {
LOG.debug("Found file item: [{}]", sanitizeNewlines(item.getFieldName()));
if (item.isFormField()) {
@@ -109,7 +109,7 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest {
processFileField(item);
}
}
- }*/
+ }
}
protected void processFileField(FileItem item) {
@@ -132,9 +132,10 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest {
files.put(item.getFieldName(), values);
}
- protected void processNormalFormField(FileItem item, String charset) throws UnsupportedEncodingException {
+ protected void processNormalFormField(FileItem item, String charset) throws IOException {
try {
LOG.debug("Item is a normal form field");
+ Charset encoding = Charset.forName(charset);
List values;
if (params.get(item.getFieldName()) != null) {
@@ -159,7 +160,7 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest {
} else if (charset == null) {
values.add(item.getString()); // WW-633
} else {
- values.add(item.getString(charset));
+ values.add(item.getString(encoding));
}
params.put(item.getFieldName(), values);
} finally {
@@ -169,15 +170,14 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest {
protected List parseRequest(HttpServletRequest servletRequest, String saveDir) throws FileUploadException {
DiskFileItemFactory fac = createDiskFileItemFactory(saveDir);
- ServletFileUpload upload = createServletFileUpload(fac);
+ JakartaServletFileUpload upload = createServletFileUpload(fac);
+
- //TODO: commons-upload upgrade
-
- return Collections.emptyList(); //upload.parseRequest(createRequestContext(servletRequest));
+ return upload.parseRequest(createRequestContext(servletRequest));
}
- protected ServletFileUpload createServletFileUpload(DiskFileItemFactory fac) {
- ServletFileUpload upload = new ServletFileUpload(fac);
+ protected JakartaServletFileUpload createServletFileUpload(DiskFileItemFactory fac) {
+ JakartaServletFileUpload upload = new JakartaServletFileUpload(fac);
if (maxSize != null) {
upload.setSizeMax(maxSize);
}
@@ -191,13 +191,14 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest {
}
protected DiskFileItemFactory createDiskFileItemFactory(String saveDir) {
- DiskFileItemFactory fac = new DiskFileItemFactory();
+ DiskFileItemFactory.Builder fac = DiskFileItemFactory.builder();
// Make sure that the data is written to file, even if the file is empty.
- fac.setSizeThreshold(-1);
+ //setting 0 or -1 no longer seems to work for fileupload buffer size, so using 1 instead.
+ fac.setBufferSize(1);
if (saveDir != null) {
- fac.setRepository(new File(saveDir));
+ fac.setPath(saveDir);
}
- return fac;
+ return fac.get();
}
/* (non-Javadoc)
@@ -238,10 +239,10 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest {
List fileList = new ArrayList<>(items.size());
for (FileItem fileItem : items) {
DiskFileItem diskFileItem = (DiskFileItem) fileItem;
- File storeLocation = diskFileItem.getStoreLocation();
+ File storeLocation = diskFileItem.getPath().toFile();
// Ensure file exists even if it is empty.
- if (diskFileItem.getSize() == 0 && storeLocation != null && !storeLocation.exists()) {
+ if (diskFileItem.getSize() == 0 && !storeLocation.exists()) {
try {
storeLocation.createNewFile();
} catch (IOException e) {
@@ -288,7 +289,7 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest {
List fileNames = new ArrayList<>(items.size());
for (FileItem fileItem : items) {
- fileNames.add(((DiskFileItem) fileItem).getStoreLocation().getName());
+ fileNames.add(((DiskFileItem) fileItem).getPath().toFile().getName());
}
return fileNames.toArray(new String[0]);
@@ -341,7 +342,7 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest {
return req.getContentType();
}
- public int getContentLength() {
+ public long getContentLength() {
return req.getContentLength();
}
@@ -365,7 +366,11 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest {
for (FileItem item : items) {
LOG.debug("Removing file {} {}", name, item);
if (!item.isInMemory()) {
- item.delete();
+ try {
+ item.delete();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
}
}
}
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java
index b7477fb2d..80ef58097 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java
@@ -18,6 +18,10 @@
*/
package org.apache.struts2.dispatcher.multipart;
+import org.apache.commons.fileupload2.jakarta.JakartaServletFileUpload;
+import org.apache.commons.fileupload2.core.FileUploadSizeException;
+import org.apache.commons.fileupload2.core.FileItemInputIterator;
+import org.apache.commons.fileupload2.core.FileItemInput;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadBase;
@@ -209,19 +213,17 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest {
* @param request the servlet request
* @param saveDir location of the save dir
*/
- protected void processUpload(HttpServletRequest request, String saveDir) throws IOException, FileUploadException {
-
- //TODO: commons-upload upgrade
+ protected void processUpload(HttpServletRequest request, String saveDir) throws Exception {
// Sanity check that the request is a multi-part/form-data request.
- /*if (ServletFileUpload.isMultipartContent(request)) {
+ if (JakartaServletFileUpload.isMultipartContent(request)) {
// Sanity check on request size.
boolean requestSizePermitted = isRequestSizePermitted(request);
// Interface with Commons FileUpload API
// Using the Streaming API
- ServletFileUpload servletFileUpload = new ServletFileUpload();
+ JakartaServletFileUpload servletFileUpload = new JakartaServletFileUpload();
if (maxSize != null) {
servletFileUpload.setSizeMax(maxSize);
}
@@ -231,12 +233,12 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest {
if (maxFileSize != null) {
servletFileUpload.setFileSizeMax(maxFileSize);
}
- FileItemIterator i = servletFileUpload.getItemIterator(request);
+ FileItemInputIterator i = servletFileUpload.getItemIterator(request);
// Iterate the file items
while (i.hasNext()) {
try {
- FileItemStream itemStream = i.next();
+ FileItemInput itemStream = i.next();
// If the file item stream is a form field, delegate to the
// field item stream handler
@@ -263,7 +265,7 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest {
LOG.warn("Error occurred during process upload", e);
}
}
- }*/
+ }
}
/**
@@ -299,7 +301,7 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest {
protected void addFileSkippedError(String fileName, HttpServletRequest request) {
String exceptionMessage = "Skipped file " + fileName + "; request size limit exceeded.";
long allowedMaxSize = maxSize != null ? maxSize : -1;
- FileSizeLimitExceededException exception = new FileUploadBase.FileSizeLimitExceededException(exceptionMessage, getRequestSize(request), allowedMaxSize);
+ FileUploadSizeException exception = new FileUploadSizeException(exceptionMessage, getRequestSize(request), allowedMaxSize);
LocalizedMessage message = buildErrorMessage(exception, new Object[]{fileName, getRequestSize(request), allowedMaxSize});
if (!errors.contains(message)) {
errors.add(message);
@@ -311,11 +313,12 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest {
*
* @param itemStream file item stream
*/
- protected void processFileItemStreamAsFormField(FileItemStream itemStream) {
+ protected void processFileItemStreamAsFormField(FileItemInput itemStream) {
String fieldName = itemStream.getFieldName();
try {
List values;
- String fieldValue = Streams.asString(itemStream.openStream());
+
+ String fieldValue = itemStream.getInputStream().toString();
if (!parameters.containsKey(fieldName)) {
values = new ArrayList<>();
parameters.put(fieldName, values);
@@ -334,7 +337,7 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest {
* @param itemStream file item stream
* @param location location
*/
- protected void processFileItemStreamAsFileField(FileItemStream itemStream, String location) {
+ protected void processFileItemStreamAsFileField(FileItemInput itemStream, String location) {
// Skip file uploads that don't have a file name - meaning that no file was selected.
if (itemStream.getName() == null || itemStream.getName().trim().isEmpty()) {
LOG.debug("No file has been uploaded for the field: {}", itemStream.getFieldName());
@@ -398,10 +401,10 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest {
* @return true if stream was successfully
* @throws IOException in case of IO errors
*/
- protected boolean streamFileToDisk(FileItemStream itemStream, File file) throws IOException {
+ protected boolean streamFileToDisk(FileItemInput itemStream, File file) throws IOException {
boolean result;
- try (InputStream input = itemStream.openStream();
- OutputStream output = new BufferedOutputStream(Files.newOutputStream(file.toPath()), bufferSize)) {
+ try (InputStream input = itemStream.getInputStream();
+ OutputStream output = new BufferedOutputStream(Files.newOutputStream(file.toPath()), bufferSize)) {
byte[] buffer = new byte[bufferSize];
LOG.debug("Streaming file using buffer size {}.", bufferSize);
for (int length; ((length = input.read(buffer)) > 0); ) {
@@ -420,7 +423,7 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest {
* @param itemStream file item stream
* @param file the file
*/
- protected void createFileInfoFromItemStream(FileItemStream itemStream, File file) {
+ protected void createFileInfoFromItemStream(FileItemInput itemStream, File file) {
// gather attributes from file upload stream.
String fileName = itemStream.getName();
String fieldName = itemStream.getFieldName();
diff --git a/core/src/main/resources/org/apache/struts2/struts-messages.properties b/core/src/main/resources/org/apache/struts2/struts-messages.properties
index 57b7e2b54..d122d6393 100644
--- a/core/src/main/resources/org/apache/struts2/struts-messages.properties
+++ b/core/src/main/resources/org/apache/struts2/struts-messages.properties
@@ -31,10 +31,10 @@ struts.messages.error.content.type.not.allowed=Content-Type not allowed: {0} "{1
struts.messages.error.file.extension.not.allowed=File extension not allowed: {0} "{1}" "{2}" {3}
# dedicated messages used to handle various problems with file upload - check {@link JakartaMultiPartRequest#parse(HttpServletRequest, String)}
-struts.messages.upload.error.SizeLimitExceededException=Request exceeded allowed size limit! Max size allowed is: {0} but request was: {1}!
-struts.messages.upload.error.FileCountLimitExceededException=Request exceeded allowed number of files! Max allowed files number is: {0}!
-struts.messages.upload.error.FileSizeLimitExceededException=File in request exceeded allowed file size limit! Max file size allowed is: {1} but file {0} was: {2}!
-struts.messages.upload.error.IOException=Error uploading: {0}!
+struts.messages.upload.error.FileUploadSizeException=Request exceeded allowed size limit! Max size allowed is: {0}!
+struts.messages.upload.error.FileUploadFileCountLimitException=Request exceeded allowed number of files! Max allowed files number is: {0}!
+struts.messages.upload.error.FileUploadByteCountLimitException=File in request exceeded allowed file size limit! Max file size allowed is: {1}!
+struts.messages.upload.error.FileUploadException=Error uploading: {0}!
devmode.notification=Developer Notification (set struts.devMode to false to disable this message):\n{0}
diff --git a/core/src/main/resources/org/apache/struts2/struts-messages_da.properties b/core/src/main/resources/org/apache/struts2/struts-messages_da.properties
index 42680d6ee..bfe68d238 100644
--- a/core/src/main/resources/org/apache/struts2/struts-messages_da.properties
+++ b/core/src/main/resources/org/apache/struts2/struts-messages_da.properties
@@ -29,7 +29,7 @@ struts.messages.error.file.too.large=Filen er for stor: {0} "{1}" {2}
struts.messages.error.content.type.not.allowed=Content-Type er ikke tilladt: {0} "{1}" {2}
# dedicated messages used to handle various problems with file upload - check {@link JakartaMultiPartRequest#parse(HttpServletRequest, String)}
-struts.messages.upload.error.SizeLimitExceededException=Request overskredet tilladte st\u00F8rrelse gr\u00E6nse! Max tilladte st\u00F8rrelse er: {0}, men anmodning var: {1}!
-struts.messages.upload.error.IOException=Fejl ved upload: {0}!
+struts.messages.upload.error.FileUploadSizeException=Request overskredet tilladte st\u00F8rrelse gr\u00E6nse! Max tilladte st\u00F8rrelse er: {0}!
+struts.messages.upload.error.FileUploadException=Fejl ved upload: {0}!
devmode.notification=Note til udvikler (ret struts.devMode til 'false' for at deaktivere denne meddelse):\n{0}
diff --git a/core/src/main/resources/org/apache/struts2/struts-messages_de.properties b/core/src/main/resources/org/apache/struts2/struts-messages_de.properties
index 7f832a3b9..82ed4a9ee 100644
--- a/core/src/main/resources/org/apache/struts2/struts-messages_de.properties
+++ b/core/src/main/resources/org/apache/struts2/struts-messages_de.properties
@@ -30,8 +30,8 @@ struts.messages.error.content.type.not.allowed=Content-Type nicht erlaubt: {0} "
struts.messages.error.file.extension.not.allowed=File extension nicht erlaubt: {0} "{1}" "{2}" {3}
# dedicated messages used to handle various problems with file upload - check {@link JakartaMultiPartRequest#parse(HttpServletRequest, String)}
-struts.messages.upload.error.SizeLimitExceededException=Der Request \u00FCbertraf die maximal erlaubte Gr\u00F6\u00DFe und wurde daher abgelehnt. Die maximal zul\u00E4ssige Gr\u00F6\u00DFe ist {0}, die Gr\u00F6\u00DFe der Anfrage betrug aber {1}!
+struts.messages.upload.error.FileUploadSizeException=Der Request \u00FCbertraf die maximal erlaubte Gr\u00F6\u00DFe und wurde daher abgelehnt. Die maximal zul\u00E4ssige Gr\u00F6\u00DFe ist {0}!
-struts.messages.upload.error.IOException=Fehler beim Upload: {0}!
+struts.messages.upload.error.FileUploadException=Fehler beim Upload: {0}!
devmode.notification=Entwickler Hinweis (Setzen Sie struts.devMode auf false um diese Nachricht zu deaktivieren):\n{0}
diff --git a/core/src/main/resources/org/apache/struts2/struts-messages_en.properties b/core/src/main/resources/org/apache/struts2/struts-messages_en.properties
index d70fe0119..1e6eabbb8 100644
--- a/core/src/main/resources/org/apache/struts2/struts-messages_en.properties
+++ b/core/src/main/resources/org/apache/struts2/struts-messages_en.properties
@@ -49,18 +49,8 @@ struts.messages.error.content.type.not.allowed=Content-Type not allowed: {0} "{1
struts.messages.error.file.extension.not.allowed=File extension not allowed: {0} "{1}" "{2}" {3}
# dedicated messages used to handle various problems with file upload - check {@link JakartaMultiPartRequest#parse(HttpServletRequest, String)}
-# params depend on exception being handled
-# FileUploadBase.SizeLimitExceededException:
-# 0 - permitted size
-# 1 - actual size
-# FileUploadBase.FileSizeLimitExceededException
-# 0 - file name
-# 1 - permitted size
-# 2 - actual size
-# FileCountLimitExceededException
-# 0 - limit
-struts.messages.upload.error.SizeLimitExceededException=Request exceeded allowed size limit! Max size allowed is: {0} but request was: {1}!
-struts.messages.upload.error.IOException=Error uploading: {0}!
+struts.messages.upload.error.FileUploadSizeException=Request exceeded allowed size limit! Max size allowed is: {0}!
+struts.messages.upload.error.FileUploadException=Error uploading: {0}!
devmode.notification=Developer Notification (set struts.devMode to false to disable this message):\n{0}
diff --git a/core/src/main/resources/org/apache/struts2/struts-messages_pl.properties b/core/src/main/resources/org/apache/struts2/struts-messages_pl.properties
index 9a84a6207..43ea46d02 100644
--- a/core/src/main/resources/org/apache/struts2/struts-messages_pl.properties
+++ b/core/src/main/resources/org/apache/struts2/struts-messages_pl.properties
@@ -30,7 +30,7 @@ struts.messages.error.content.type.not.allowed=Niedozwolony Content-Type: {0} "{
struts.messages.error.file.extension.not.allowed=Niedozwolony File extension: {0} "{1}" "{2}" {3}
# dedicated messages used to handle various problems with file upload - check {@link JakartaMultiPartRequest#parse(HttpServletRequest, String)}
-struts.messages.upload.error.SizeLimitExceededException=Zapytanie przekroczy\u0142o dozwolony limit rozmiaru! Maksymalny rozmiar to: {0} ale \u017C\u0105danie mia\u0142o: {1}!
-struts.messages.upload.error.IOException=B\u0142\u0105d podczas wysy\u0142ania pliku: {0}!
+struts.messages.upload.error.FileUploadSizeException=Zapytanie przekroczy\u0142o dozwolony limit rozmiaru! Maksymalny rozmiar to: {0}!
+struts.messages.upload.error.FileUploadException=B\u0142\u0105d podczas wysy\u0142ania pliku: {0}!
devmode.notification=Powiadmienie Developera (ustaw struts.devMode na false by wy\u0142\u0105czy\u0107 t\u0119 wiadomo\u015B\u0107):\n{0}
diff --git a/core/src/main/resources/org/apache/struts2/struts-messages_pt.properties b/core/src/main/resources/org/apache/struts2/struts-messages_pt.properties
index 920bfd165..aa7934aab 100644
--- a/core/src/main/resources/org/apache/struts2/struts-messages_pt.properties
+++ b/core/src/main/resources/org/apache/struts2/struts-messages_pt.properties
@@ -29,7 +29,7 @@ struts.messages.error.file.too.large=Arquivo muito grande: {0} "{1}" {2}
struts.messages.error.content.type.not.allowed=Content-Type n\u00E3o permitido: {0} "{1}" {2}
# dedicated messages used to handle various problems with file upload - check {@link JakartaMultiPartRequest#parse(HttpServletRequest, String)}
-struts.messages.upload.error.SizeLimitExceededException=Pedido excedeu o limite de tamanho permitido! Tamanho m\u00E1ximo permitido \u00E9: {0} mas foi pedido: {1}!
-struts.messages.upload.error.IOException=Erro de uploading: {0}!
+struts.messages.upload.error.FileUploadSizeException=Pedido excedeu o limite de tamanho permitido! Tamanho m\u00E1ximo permitido \u00E9: {0}!
+struts.messages.upload.error.FileUploadException=Erro de uploading: {0}!
devmode.notification=Notifica\u00E7\u00E3o para o Desenvolvedor (altere o param\u00EAtro struts.devMode para false para desabilitar esta mensagem):\n{0}
diff --git a/core/src/test/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequestTest.java b/core/src/test/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequestTest.java
index 7c01ac8ed..89a01b8a5 100644
--- a/core/src/test/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequestTest.java
+++ b/core/src/test/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequestTest.java
@@ -27,14 +27,12 @@ import java.nio.file.Paths;
import org.apache.struts2.dispatcher.LocalizedMessage;
import org.junit.Assert;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.mock.web.DelegatingServletInputStream;
import jakarta.servlet.http.HttpServletRequest;
-@Ignore
public class JakartaStreamMultiPartRequestTest {
private JakartaStreamMultiPartRequest multiPart;
@@ -68,6 +66,6 @@ public class JakartaStreamMultiPartRequestTest {
multiPart.setMaxSize("4");
multiPart.parse(request, tempDir.toString());
LocalizedMessage next = multiPart.getErrors().iterator().next();
- Assert.assertEquals(next.getTextKey(), "struts.messages.upload.error.SizeLimitExceededException");
+ Assert.assertEquals(next.getTextKey(), "struts.messages.upload.error.FileUploadSizeException");
}
}
diff --git a/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java b/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java
index b0fe40d7e..7bf286030 100644
--- a/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java
+++ b/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java
@@ -29,6 +29,7 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
+import org.apache.commons.fileupload2.jakarta.JakartaServletFileUpload;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsInternalTestCase;
import org.apache.struts2.TestAction;
@@ -54,7 +55,7 @@ import static org.assertj.core.api.Assertions.assertThat;
/**
* Test case for FileUploadInterceptor.
*/
-@Ignore
+
public class FileUploadInterceptorTest extends StrutsInternalTestCase {
public static final UploadedFile EMPTY_FILE = new UploadedFile() {
@@ -354,8 +355,7 @@ public class FileUploadInterceptorTest extends StrutsInternalTestCase {
endline;
req.setContent(content.getBytes());
- fail("TODO");
- //assertTrue(ServletFileUpload.isMultipartContent(req));
+ assertTrue(JakartaServletFileUpload.isMultipartContent(req));
MyFileupAction action = new MyFileupAction();
container.inject(action);
@@ -407,8 +407,7 @@ public class FileUploadInterceptorTest extends StrutsInternalTestCase {
endline;
req.setContent(content.getBytes());
- fail("TODO");
- //assertTrue(ServletFileUpload.isMultipartContent(req));
+ assertTrue(JakartaServletFileUpload.isMultipartContent(req));
MyFileupAction action = new MyFileupAction();
container.inject(action);
@@ -464,7 +463,7 @@ public class FileUploadInterceptorTest extends StrutsInternalTestCase {
assertEquals(1, errors.size());
String msg = errors.iterator().next();
assertEquals(
- "File in request exceeded allowed file size limit! Max file size allowed is: 10 but file deleteme.txt was: 34!",
+ "File in request exceeded allowed file size limit! Max file size allowed is: 10!",
msg);
}
diff --git a/pom.xml b/pom.xml
index 98e094633..489a09234 100644
--- a/pom.xml
+++ b/pom.xml
@@ -836,9 +836,9 @@
4.4
- commons-fileupload
- commons-fileupload
- 1.5
+ org.apache.commons
+ commons-fileupload2-jakarta
+ 2.0.0-M1
commons-io