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