This is an automated email from the ASF dual-hosted git repository. solomax pushed a commit to branch fileupload2 in repository https://gitbox.apache.org/repos/asf/wicket.git
The following commit(s) were added to refs/heads/fileupload2 by this push: new 7338e48279 [WICKET-6915] module-info is created 7338e48279 is described below commit 7338e482795827caa58baadd55a56bf1b76aebff Author: Maxim Solodovnik <solomax...@gmail.com> AuthorDate: Sat Mar 25 16:50:31 2023 +0700 [WICKET-6915] module-info is created --- pom.xml | 6 + wicket-commons-fileupload/pom.xml | 19 +- .../src/main/java/module-info.java | 27 + .../wicket/commons/fileupload2/FileItem.java | 2 +- .../commons/fileupload2/disk/DiskFileItem.java | 2 +- .../commons/fileupload2/disk/package-info.java | 4 +- .../wicket/commons/fileupload2/package-info.java | 6 +- .../fileupload2/portlet/PortletFileUpload.java | 148 ------ .../fileupload2/portlet/PortletRequestContext.java | 132 ----- .../commons/fileupload2/portlet/package-info.java | 45 -- .../fileupload2/servlet/FileCleanerCleanup.java | 89 ---- .../fileupload2/servlet/ServletFileUpload.java | 153 ------ .../fileupload2/servlet/ServletRequestContext.java | 130 ----- .../commons/fileupload2/servlet/package-info.java | 45 -- .../wicket/commons/fileupload2/FileUploadTest.java | 403 --------------- .../fileupload2/HttpServletRequestFactory.java | 56 -- .../fileupload2/MockHttpServletRequest.java | 570 --------------------- .../commons/fileupload2/ProgressListenerTest.java | 133 ----- .../wicket/commons/fileupload2/SizesTest.java | 292 ----------- .../wicket/commons/fileupload2/StreamingTest.java | 288 ----------- .../apache/wicket/commons/fileupload2/Util.java | 66 --- .../jaksrvlt/JakSrvltFileUploadTest.java | 2 - .../portlet/MockPortletActionRequest.java | 272 ---------- .../fileupload2/portlet/PortletFileUploadTest.java | 87 ---- .../fileupload2/servlet/ServletFileUploadTest.java | 106 ---- wicket-core/pom.xml | 16 +- wicket-util/pom.xml | 1 - 27 files changed, 49 insertions(+), 3051 deletions(-) diff --git a/pom.xml b/pom.xml index 3ca1396903..318a813671 100644 --- a/pom.xml +++ b/pom.xml @@ -359,6 +359,12 @@ <version>10.0.0-M1-SNAPSHOT</version> <type>jar</type> </dependency> + <dependency> + <groupId>org.apache.wicket</groupId> + <artifactId>wicket-commons-fileupload</artifactId> + <version>10.0.0-M1-SNAPSHOT</version> + <type>jar</type> + </dependency> <dependency> <groupId>org.apache.wicket</groupId> <artifactId>wicket-core</artifactId> diff --git a/wicket-commons-fileupload/pom.xml b/wicket-commons-fileupload/pom.xml index b8497f0976..feaec2468c 100644 --- a/wicket-commons-fileupload/pom.xml +++ b/wicket-commons-fileupload/pom.xml @@ -237,6 +237,7 @@ <moditect-maven-plugin.version>1.0.0.RC2</moditect-maven-plugin.version> <moditect.skip>true</moditect.skip> <enforcer.skip>true</enforcer.skip> + <checkstyle.skip>true</checkstyle.skip> <!-- Commons Release Plugin --> <commons.bc.version>1.3.3</commons.bc.version> @@ -245,8 +246,6 @@ <commons.distSvnStagingUrl>scm:svn:https://dist.apache.org/repos/dist/dev/commons/${commons.componentid}</commons.distSvnStagingUrl> <commons.releaseManagerName>Rob Tompkins</commons.releaseManagerName> <commons.releaseManagerKey>B6E73D84EA4FCC47166087253FAAD2CD5ECBB314</commons.releaseManagerKey> - - <automatic-module-name>org.apache.wicket.commons.fileupload</automatic-module-name> </properties> <dependencies> @@ -282,22 +281,6 @@ <build> <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <version>${maven-jar-plugin.version}</version> - <configuration> - <archive> - <manifest> - <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries> - <addDefaultImplementationEntries>true</addDefaultImplementationEntries> - </manifest> - <manifestEntries> - <Automatic-Module-Name>${automatic-module-name}</Automatic-Module-Name> - </manifestEntries> - </archive> - </configuration> - </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> diff --git a/wicket-commons-fileupload/src/main/java/module-info.java b/wicket-commons-fileupload/src/main/java/module-info.java new file mode 100644 index 0000000000..ff8e457e38 --- /dev/null +++ b/wicket-commons-fileupload/src/main/java/module-info.java @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + module org.apache.wicket.commons.fileupload { + requires org.apache.commons.io; + requires jakarta.servlet; + + exports org.apache.wicket.commons.fileupload2; + exports org.apache.wicket.commons.fileupload2.pub; + exports org.apache.wicket.commons.fileupload2.util; + exports org.apache.wicket.commons.fileupload2.disk; + exports org.apache.wicket.commons.fileupload2.jaksrvlt; +} diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItem.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItem.java index 5409399d04..e78c6231a1 100644 --- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItem.java +++ b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/FileItem.java @@ -29,7 +29,7 @@ import java.io.UnsupportedEncodingException; * * <p> After retrieving an instance of this class from a {@link * org.apache.wicket.commons.fileupload2.FileUpload FileUpload} instance (see - * {@link org.apache.wicket.commons.fileupload2.servlet.ServletFileUpload + * {@link org.apache.wicket.commons.fileupload2.jaksrvlt.JakSrvltFileUpload * #parseRequest(javax.servlet.http.HttpServletRequest)}), you may * either request all contents of the file at once using {@link #get()} or * request an {@link java.io.InputStream InputStream} with diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/disk/DiskFileItem.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/disk/DiskFileItem.java index d8da4d3e9c..c4e302484e 100644 --- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/disk/DiskFileItem.java +++ b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/disk/DiskFileItem.java @@ -45,7 +45,7 @@ import org.apache.wicket.commons.fileupload2.util.Streams; * * <p> After retrieving an instance of this class from a {@link * DiskFileItemFactory} instance (see - * {@link org.apache.wicket.commons.fileupload2.servlet.ServletFileUpload + * {@link org.apache.wicket.commons.fileupload2.jaksrvlt.JakSrvltFileUpload * #parseRequest(javax.servlet.http.HttpServletRequest)}), you may * either request all contents of file at once using {@link #get()} or * request an {@link java.io.InputStream InputStream} with diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/disk/package-info.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/disk/package-info.java index b37424308a..0276bc1881 100644 --- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/disk/package-info.java +++ b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/disk/package-info.java @@ -29,9 +29,7 @@ * would be created, configured, and then passed to a * {@link org.apache.wicket.commons.fileupload2.FileUpload FileUpload} * implementation such as - * {@link org.apache.wicket.commons.fileupload2.servlet.ServletFileUpload ServletFileUpload} - * or - * {@link org.apache.wicket.commons.fileupload2.portlet.PortletFileUpload PortletFileUpload}. + * {@link org.apache.wicket.commons.fileupload2.jaksrvlt.JakSrvltFileUpload ServletFileUpload} * </p> * <p> * The following code fragment demonstrates this usage. diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/package-info.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/package-info.java index 7ff4f65d79..f960f63e46 100644 --- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/package-info.java +++ b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/package-info.java @@ -27,10 +27,8 @@ * these classes are not typically used directly. Instead, normal usage * involves one of the provided extensions of * {@link org.apache.wicket.commons.fileupload2.FileUpload FileUpload} such as - * {@link org.apache.wicket.commons.fileupload2.servlet.ServletFileUpload ServletFileUpload} - * or - * {@link org.apache.wicket.commons.fileupload2.portlet.PortletFileUpload PortletFileUpload}, - * together with a factory for + * {@link org.apache.wicket.commons.fileupload2.jaksrvlt.JakSrvltFileUpload ServletFileUpload} + * together with a factory for * {@link org.apache.wicket.commons.fileupload2.FileItem FileItem} instances, * such as * {@link org.apache.wicket.commons.fileupload2.disk.DiskFileItemFactory DiskFileItemFactory}. diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/portlet/PortletFileUpload.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/portlet/PortletFileUpload.java deleted file mode 100644 index 0b77b353dc..0000000000 --- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/portlet/PortletFileUpload.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.commons.fileupload2.portlet; - -import java.io.IOException; -import java.util.List; -import java.util.Map; - -import javax.portlet.ActionRequest; - -import org.apache.wicket.commons.fileupload2.FileItem; -import org.apache.wicket.commons.fileupload2.FileItemFactory; -import org.apache.wicket.commons.fileupload2.FileItemIterator; -import org.apache.wicket.commons.fileupload2.FileUpload; -import org.apache.wicket.commons.fileupload2.FileUploadBase; -import org.apache.wicket.commons.fileupload2.FileUploadException; - -/** - * <p>High level API for processing file uploads.</p> - * - * <p>This class handles multiple files per single HTML widget, sent using - * {@code multipart/mixed} encoding type, as specified by - * <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>. Use - * {@link org.apache.wicket.commons.fileupload2.servlet.ServletFileUpload - * #parseRequest(javax.servlet.http.HttpServletRequest)} to acquire a list - * of {@link org.apache.wicket.commons.fileupload2.FileItem FileItems} associated - * with a given HTML widget.</p> - * - * <p>How the data for individual parts is stored is determined by the factory - * used to create them; a given part may be in memory, on disk, or somewhere - * else.</p> - * - * @since 1.1 - */ -public class PortletFileUpload extends FileUpload { - - // ---------------------------------------------------------- Class methods - - /** - * Utility method that determines whether the request contains multipart - * content. - * - * @param request The portlet request to be evaluated. Must be non-null. - * - * @return {@code true} if the request is multipart; - * {@code false} otherwise. - */ - public static final boolean isMultipartContent(final ActionRequest request) { - return FileUploadBase.isMultipartContent( - new PortletRequestContext(request)); - } - - // ----------------------------------------------------------- Constructors - - /** - * Constructs an uninitialized instance of this class. A factory must be - * configured, using {@code setFileItemFactory()}, before attempting - * to parse requests. - * - * @see FileUpload#FileUpload(FileItemFactory) - */ - public PortletFileUpload() { - } - - /** - * Constructs an instance of this class which uses the supplied factory to - * create {@code FileItem} instances. - * - * @see FileUpload#FileUpload() - * @param fileItemFactory The factory to use for creating file items. - */ - public PortletFileUpload(final FileItemFactory fileItemFactory) { - super(fileItemFactory); - } - - // --------------------------------------------------------- Public methods - - /** - * Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a> - * compliant {@code multipart/form-data} stream. - * - * @param request The portlet request to be parsed. - * - * @return A list of {@code FileItem} instances parsed from the - * request, in the order that they were transmitted. - * - * @throws FileUploadException if there are problems reading/parsing - * the request or storing files. - */ - public List<FileItem> parseRequest(final ActionRequest request) - throws FileUploadException { - return parseRequest(new PortletRequestContext(request)); - } - - /** - * Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a> - * compliant {@code multipart/form-data} stream. - * - * @param request The portlet request to be parsed. - * - * @return A map of {@code FileItem} instances parsed from the request. - * - * @throws FileUploadException if there are problems reading/parsing - * the request or storing files. - * - * @since 1.3 - */ - public Map<String, List<FileItem>> parseParameterMap(final ActionRequest request) - throws FileUploadException { - return parseParameterMap(new PortletRequestContext(request)); - } - - /** - * Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a> - * compliant {@code multipart/form-data} stream. - * - * @param request The portlet request to be parsed. - * - * @return An iterator to instances of {@code FileItemStream} - * parsed from the request, in the order that they were - * transmitted. - * - * @throws FileUploadException if there are problems reading/parsing - * the request or storing files. - * @throws IOException An I/O error occurred. This may be a network - * error while communicating with the client or a problem while - * storing the uploaded content. - */ - public FileItemIterator getItemIterator(final ActionRequest request) - throws FileUploadException, IOException { - return super.getItemIterator(new PortletRequestContext(request)); - } - -} diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/portlet/PortletRequestContext.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/portlet/PortletRequestContext.java deleted file mode 100644 index 5bdc817862..0000000000 --- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/portlet/PortletRequestContext.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.commons.fileupload2.portlet; - -import static java.lang.String.format; - -import java.io.IOException; -import java.io.InputStream; - -import javax.portlet.ActionRequest; - -import org.apache.wicket.commons.fileupload2.FileUploadBase; -import org.apache.wicket.commons.fileupload2.UploadContext; - -/** - * <p>Provides access to the request information needed for a request made to - * a portlet.</p> - * - * @since 1.1 - */ -public class PortletRequestContext implements UploadContext { - - // ----------------------------------------------------- Instance Variables - - /** - * The request for which the context is being provided. - */ - private final ActionRequest request; - - - // ----------------------------------------------------------- Constructors - - /** - * Construct a context for this request. - * - * @param request The request to which this context applies. - */ - public PortletRequestContext(final ActionRequest request) { - this.request = request; - } - - - // --------------------------------------------------------- Public Methods - - /** - * Retrieve the character encoding for the request. - * - * @return The character encoding for the request. - */ - @Override - public String getCharacterEncoding() { - return request.getCharacterEncoding(); - } - - /** - * Retrieve the content type of the request. - * - * @return The content type of the request. - */ - @Override - public String getContentType() { - return request.getContentType(); - } - - /** - * Retrieve the content length of the request. - * - * @return The content length of the request. - * @deprecated 1.3 Use {@link #contentLength()} instead - */ - @Override - @Deprecated - public int getContentLength() { - return request.getContentLength(); - } - - /** - * Retrieve the content length of the request. - * - * @return The content length of the request. - * @since 1.3 - */ - @Override - public long contentLength() { - long size; - try { - size = Long.parseLong(request.getProperty(FileUploadBase.CONTENT_LENGTH)); - } catch (final NumberFormatException e) { - size = request.getContentLength(); - } - return size; - } - - /** - * Retrieve the input stream for the request. - * - * @return The input stream for the request. - * - * @throws IOException if a problem occurs. - */ - @Override - public InputStream getInputStream() throws IOException { - return request.getPortletInputStream(); - } - - /** - * Returns a string representation of this object. - * - * @return a string representation of this object. - */ - @Override - public String toString() { - return format("ContentLength=%s, ContentType=%s", - this.contentLength(), - this.getContentType()); - } - -} diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/portlet/package-info.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/portlet/package-info.java deleted file mode 100644 index d2a73a5b92..0000000000 --- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/portlet/package-info.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * <p> - * An implementation of - * {@link org.apache.wicket.commons.fileupload2.FileUpload FileUpload} - * for use in portlets conforming to JSR 168. This implementation requires - * only access to the portlet's current {@code ActionRequest} instance, - * and a suitable - * {@link org.apache.wicket.commons.fileupload2.FileItemFactory FileItemFactory} - * implementation, such as - * {@link org.apache.wicket.commons.fileupload2.disk.DiskFileItemFactory DiskFileItemFactory}. - * </p> - * <p> - * The following code fragment demonstrates typical usage. - * </p> - * <pre> - * DiskFileItemFactory factory = new DiskFileItemFactory(); - * // Configure the factory here, if desired. - * PortletFileUpload upload = new PortletFileUpload(factory); - * // Configure the uploader here, if desired. - * List fileItems = upload.parseRequest(request); - * </pre> - * <p> - * Please see the FileUpload - * <a href="https://commons.apache.org/fileupload/using.html" target="_top">User Guide</a> - * for further details and examples of how to use this package. - * </p> - */ -package org.apache.wicket.commons.fileupload2.portlet; diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/servlet/FileCleanerCleanup.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/servlet/FileCleanerCleanup.java deleted file mode 100644 index 231891f0e5..0000000000 --- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/servlet/FileCleanerCleanup.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.commons.fileupload2.servlet; - -import javax.servlet.ServletContext; -import javax.servlet.ServletContextListener; -import javax.servlet.ServletContextEvent; - -import org.apache.commons.io.FileCleaningTracker; - -/** - * A servlet context listener, which ensures that the - * {@link FileCleaningTracker}'s reaper thread is terminated, - * when the web application is destroyed. - */ -public class FileCleanerCleanup implements ServletContextListener { - - /** - * Attribute name, which is used for storing an instance of - * {@link FileCleaningTracker} in the web application. - */ - public static final String FILE_CLEANING_TRACKER_ATTRIBUTE - = FileCleanerCleanup.class.getName() + ".FileCleaningTracker"; - - /** - * Returns the instance of {@link FileCleaningTracker}, which is - * associated with the given {@link ServletContext}. - * - * @param pServletContext The servlet context to query - * @return The contexts tracker - */ - public static FileCleaningTracker - getFileCleaningTracker(final ServletContext pServletContext) { - return (FileCleaningTracker) - pServletContext.getAttribute(FILE_CLEANING_TRACKER_ATTRIBUTE); - } - - /** - * Sets the instance of {@link FileCleaningTracker}, which is - * associated with the given {@link ServletContext}. - * - * @param pServletContext The servlet context to modify - * @param pTracker The tracker to set - */ - public static void setFileCleaningTracker(final ServletContext pServletContext, - final FileCleaningTracker pTracker) { - pServletContext.setAttribute(FILE_CLEANING_TRACKER_ATTRIBUTE, pTracker); - } - - /** - * Called when the web application is initialized. Does - * nothing. - * - * @param sce The servlet context, used for calling - * {@link #setFileCleaningTracker(ServletContext, FileCleaningTracker)}. - */ - @Override - public void contextInitialized(final ServletContextEvent sce) { - setFileCleaningTracker(sce.getServletContext(), - new FileCleaningTracker()); - } - - /** - * Called when the web application is being destroyed. - * Calls {@link FileCleaningTracker#exitWhenFinished()}. - * - * @param sce The servlet context, used for calling - * {@link #getFileCleaningTracker(ServletContext)}. - */ - @Override - public void contextDestroyed(final ServletContextEvent sce) { - getFileCleaningTracker(sce.getServletContext()).exitWhenFinished(); - } - -} diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/servlet/ServletFileUpload.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/servlet/ServletFileUpload.java deleted file mode 100644 index 33e8a75207..0000000000 --- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/servlet/ServletFileUpload.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.commons.fileupload2.servlet; - -import java.io.IOException; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.wicket.commons.fileupload2.FileItem; -import org.apache.wicket.commons.fileupload2.FileItemFactory; -import org.apache.wicket.commons.fileupload2.FileItemIterator; -import org.apache.wicket.commons.fileupload2.FileUpload; -import org.apache.wicket.commons.fileupload2.FileUploadBase; -import org.apache.wicket.commons.fileupload2.FileUploadException; - -/** - * <p>High level API for processing file uploads.</p> - * - * <p>This class handles multiple files per single HTML widget, sent using - * {@code multipart/mixed} encoding type, as specified by - * <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>. Use {@link - * #parseRequest(HttpServletRequest)} to acquire a list of {@link - * org.apache.wicket.commons.fileupload2.FileItem}s associated with a given HTML - * widget.</p> - * - * <p>How the data for individual parts is stored is determined by the factory - * used to create them; a given part may be in memory, on disk, or somewhere - * else.</p> - */ -public class ServletFileUpload extends FileUpload { - - /** - * Constant for HTTP POST method. - */ - private static final String POST_METHOD = "POST"; - - // ---------------------------------------------------------- Class methods - - /** - * Utility method that determines whether the request contains multipart - * content. - * - * @param request The servlet request to be evaluated. Must be non-null. - * - * @return {@code true} if the request is multipart; - * {@code false} otherwise. - */ - public static final boolean isMultipartContent( - final HttpServletRequest request) { - if (!POST_METHOD.equalsIgnoreCase(request.getMethod())) { - return false; - } - return FileUploadBase.isMultipartContent(new ServletRequestContext(request)); - } - - // ----------------------------------------------------------- Constructors - - /** - * Constructs an uninitialized instance of this class. A factory must be - * configured, using {@code setFileItemFactory()}, before attempting - * to parse requests. - * - * @see FileUpload#FileUpload(FileItemFactory) - */ - public ServletFileUpload() { - } - - /** - * Constructs an instance of this class which uses the supplied factory to - * create {@code FileItem} instances. - * - * @see FileUpload#FileUpload() - * @param fileItemFactory The factory to use for creating file items. - */ - public ServletFileUpload(final FileItemFactory fileItemFactory) { - super(fileItemFactory); - } - - // --------------------------------------------------------- Public methods - - /** - * Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a> - * compliant {@code multipart/form-data} stream. - * - * @param request The servlet request to be parsed. - * - * @return A list of {@code FileItem} instances parsed from the - * request, in the order that they were transmitted. - * - * @throws FileUploadException if there are problems reading/parsing - * the request or storing files. - */ - public List<FileItem> parseRequest(final HttpServletRequest request) - throws FileUploadException { - return parseRequest(new ServletRequestContext(request)); - } - - /** - * Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a> - * compliant {@code multipart/form-data} stream. - * - * @param request The servlet request to be parsed. - * - * @return A map of {@code FileItem} instances parsed from the request. - * - * @throws FileUploadException if there are problems reading/parsing - * the request or storing files. - * - * @since 1.3 - */ - public Map<String, List<FileItem>> parseParameterMap(final HttpServletRequest request) - throws FileUploadException { - return parseParameterMap(new ServletRequestContext(request)); - } - - /** - * Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a> - * compliant {@code multipart/form-data} stream. - * - * @param request The servlet request to be parsed. - * - * @return An iterator to instances of {@code FileItemStream} - * parsed from the request, in the order that they were - * transmitted. - * - * @throws FileUploadException if there are problems reading/parsing - * the request or storing files. - * @throws IOException An I/O error occurred. This may be a network - * error while communicating with the client or a problem while - * storing the uploaded content. - */ - public FileItemIterator getItemIterator(final HttpServletRequest request) - throws FileUploadException, IOException { - return super.getItemIterator(new ServletRequestContext(request)); - } - -} diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/servlet/ServletRequestContext.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/servlet/ServletRequestContext.java deleted file mode 100644 index b8a1ffd297..0000000000 --- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/servlet/ServletRequestContext.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.commons.fileupload2.servlet; - -import static java.lang.String.format; - -import java.io.IOException; -import java.io.InputStream; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.wicket.commons.fileupload2.FileUploadBase; -import org.apache.wicket.commons.fileupload2.UploadContext; - -/** - * <p>Provides access to the request information needed for a request made to - * an HTTP servlet.</p> - * - * @since 1.1 - */ -public class ServletRequestContext implements UploadContext { - - // ----------------------------------------------------- Instance Variables - - /** - * The request for which the context is being provided. - */ - private final HttpServletRequest request; - - // ----------------------------------------------------------- Constructors - - /** - * Construct a context for this request. - * - * @param request The request to which this context applies. - */ - public ServletRequestContext(final HttpServletRequest request) { - this.request = request; - } - - // --------------------------------------------------------- Public Methods - - /** - * Retrieve the character encoding for the request. - * - * @return The character encoding for the request. - */ - @Override - public String getCharacterEncoding() { - return request.getCharacterEncoding(); - } - - /** - * Retrieve the content type of the request. - * - * @return The content type of the request. - */ - @Override - public String getContentType() { - return request.getContentType(); - } - - /** - * Retrieve the content length of the request. - * - * @return The content length of the request. - * @deprecated 1.3 Use {@link #contentLength()} instead - */ - @Override - @Deprecated - public int getContentLength() { - return request.getContentLength(); - } - - /** - * Retrieve the content length of the request. - * - * @return The content length of the request. - * @since 1.3 - */ - @Override - public long contentLength() { - long size; - try { - size = Long.parseLong(request.getHeader(FileUploadBase.CONTENT_LENGTH)); - } catch (final NumberFormatException e) { - size = request.getContentLength(); - } - return size; - } - - /** - * Retrieve the input stream for the request. - * - * @return The input stream for the request. - * - * @throws IOException if a problem occurs. - */ - @Override - public InputStream getInputStream() throws IOException { - return request.getInputStream(); - } - - /** - * Returns a string representation of this object. - * - * @return a string representation of this object. - */ - @Override - public String toString() { - return format("ContentLength=%s, ContentType=%s", - this.contentLength(), - this.getContentType()); - } - -} diff --git a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/servlet/package-info.java b/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/servlet/package-info.java deleted file mode 100644 index 168edc91a2..0000000000 --- a/wicket-commons-fileupload/src/main/java/org/apache/wicket/commons/fileupload2/servlet/package-info.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * <p> - * An implementation of - * {@link org.apache.wicket.commons.fileupload2.FileUpload FileUpload} - * for use in servlets conforming to JSR 53. This implementation requires - * only access to the servlet's current {@code HttpServletRequest} - * instance, and a suitable - * {@link org.apache.wicket.commons.fileupload2.FileItemFactory FileItemFactory} - * implementation, such as - * {@link org.apache.wicket.commons.fileupload2.disk.DiskFileItemFactory DiskFileItemFactory}. - * </p> - * <p> - * The following code fragment demonstrates typical usage. - * </p> - * <pre> - * DiskFileItemFactory factory = new DiskFileItemFactory(); - * // Configure the factory here, if desired. - * ServletFileUpload upload = new ServletFileUpload(factory); - * // Configure the uploader here, if desired. - * List fileItems = upload.parseRequest(request); - * </pre> - * <p> - * Please see the FileUpload - * <a href="https://commons.apache.org/fileupload/using.html" target="_top">User Guide</a> - * for further details and examples of how to use this package. - * </p> - */ -package org.apache.wicket.commons.fileupload2.servlet; diff --git a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/FileUploadTest.java b/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/FileUploadTest.java deleted file mode 100644 index c42a085bf6..0000000000 --- a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/FileUploadTest.java +++ /dev/null @@ -1,403 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.commons.fileupload2; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.nio.charset.StandardCharsets; -import java.util.List; -import java.util.stream.Stream; - -import org.apache.wicket.commons.fileupload2.FileItem; -import org.apache.wicket.commons.fileupload2.FileUpload; -import org.apache.wicket.commons.fileupload2.FileUploadException; -import org.apache.wicket.commons.fileupload2.portlet.PortletFileUploadTest; -import org.apache.wicket.commons.fileupload2.servlet.ServletFileUploadTest; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; - -/** - * Common tests for implementations of {@link FileUpload}. This is a parameterized test. - * Tests must be valid and common to all implementations of FileUpload added as parameter - * in this class. - * - * @see ServletFileUploadTest - * @see PortletFileUploadTest - * @since 1.4 - */ -public class FileUploadTest { - - /** - * @return {@link FileUpload} classes under test. - */ - public static Stream<FileUpload> data() { - return Util.fileUploadImplementations().stream(); - } - - // --- Test methods common to all implementations of a FileUpload - - @ParameterizedTest - @MethodSource("data") - public void testFileUpload(final FileUpload upload) - throws IOException, FileUploadException { - final List<FileItem> fileItems = Util.parseUpload(upload, - "-----1234\r\n" + - "Content-Disposition: " - + "form-data; name=\"file\"; filename=\"foo.tab\"\r\n" + - "Content-Type: text/whatever\r\n" + - "\r\n" + - "This is the content of the file\n" + - "\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"field\"\r\n" + - "\r\n" + - "fieldValue\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"multi\"\r\n" + - "\r\n" + - "value1\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"multi\"\r\n" + - "\r\n" + - "value2\r\n" + - "-----1234--\r\n"); - assertEquals(4, fileItems.size()); - - final FileItem file = fileItems.get(0); - assertEquals("file", file.getFieldName()); - assertFalse(file.isFormField()); - assertEquals("This is the content of the file\n", file.getString()); - assertEquals("text/whatever", file.getContentType()); - assertEquals("foo.tab", file.getName()); - - final FileItem field = fileItems.get(1); - assertEquals("field", field.getFieldName()); - assertTrue(field.isFormField()); - assertEquals("fieldValue", field.getString()); - - final FileItem multi0 = fileItems.get(2); - assertEquals("multi", multi0.getFieldName()); - assertTrue(multi0.isFormField()); - assertEquals("value1", multi0.getString()); - - final FileItem multi1 = fileItems.get(3); - assertEquals("multi", multi1.getFieldName()); - assertTrue(multi1.isFormField()); - assertEquals("value2", multi1.getString()); - } - - @ParameterizedTest - @MethodSource("data") - public void testFilenameCaseSensitivity(final FileUpload upload) - throws IOException, FileUploadException { - final List<FileItem> fileItems = Util.parseUpload(upload, - "-----1234\r\n" + - "Content-Disposition: form-data; " - + "name=\"FiLe\"; filename=\"FOO.tab\"\r\n" + - "Content-Type: text/whatever\r\n" + - "\r\n" + - "This is the content of the file\n" + - "\r\n" + - "-----1234--\r\n"); - assertEquals(1, fileItems.size()); - - final FileItem file = fileItems.get(0); - assertEquals("FiLe", file.getFieldName()); - assertEquals("FOO.tab", file.getName()); - } - - /** - * This is what the browser does if you submit the form without choosing a file. - */ - @ParameterizedTest - @MethodSource("data") - public void testEmptyFile(final FileUpload upload) - throws UnsupportedEncodingException, FileUploadException { - final List<FileItem> fileItems = Util.parseUpload (upload, - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"file\"; filename=\"\"\r\n" + - "\r\n" + - "\r\n" + - "-----1234--\r\n"); - assertEquals(1, fileItems.size()); - - final FileItem file = fileItems.get(0); - assertFalse(file.isFormField()); - assertEquals("", file.getString()); - assertEquals("", file.getName()); - } - - /** - * Internet Explorer 5 for the Mac has a bug where the carriage - * return is missing on any boundary line immediately preceding - * an input with type=image. (type=submit does not have the bug.) - */ - @ParameterizedTest - @MethodSource("data") - public void testIE5MacBug(final FileUpload upload) - throws UnsupportedEncodingException, FileUploadException { - final List<FileItem> fileItems = Util.parseUpload(upload, - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"field1\"\r\n" + - "\r\n" + - "fieldValue\r\n" + - "-----1234\n" + // NOTE \r missing - "Content-Disposition: form-data; name=\"submitName.x\"\r\n" + - "\r\n" + - "42\r\n" + - "-----1234\n" + // NOTE \r missing - "Content-Disposition: form-data; name=\"submitName.y\"\r\n" + - "\r\n" + - "21\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"field2\"\r\n" + - "\r\n" + - "fieldValue2\r\n" + - "-----1234--\r\n"); - - assertEquals(4, fileItems.size()); - - final FileItem field1 = fileItems.get(0); - assertEquals("field1", field1.getFieldName()); - assertTrue(field1.isFormField()); - assertEquals("fieldValue", field1.getString()); - - final FileItem submitX = fileItems.get(1); - assertEquals("submitName.x", submitX.getFieldName()); - assertTrue(submitX.isFormField()); - assertEquals("42", submitX.getString()); - - final FileItem submitY = fileItems.get(2); - assertEquals("submitName.y", submitY.getFieldName()); - assertTrue(submitY.isFormField()); - assertEquals("21", submitY.getString()); - - final FileItem field2 = fileItems.get(3); - assertEquals("field2", field2.getFieldName()); - assertTrue(field2.isFormField()); - assertEquals("fieldValue2", field2.getString()); - } - - /** - * Test for <a href="https://issues.apache.org/jira/browse/FILEUPLOAD-62">FILEUPLOAD-62</a> - */ - @ParameterizedTest - @MethodSource("data") - public void testFILEUPLOAD62(final FileUpload upload) throws Exception { - final String contentType = "multipart/form-data; boundary=AaB03x"; - final String request = - "--AaB03x\r\n" + - "content-disposition: form-data; name=\"field1\"\r\n" + - "\r\n" + - "Joe Blow\r\n" + - "--AaB03x\r\n" + - "content-disposition: form-data; name=\"pics\"\r\n" + - "Content-type: multipart/mixed; boundary=BbC04y\r\n" + - "\r\n" + - "--BbC04y\r\n" + - "Content-disposition: attachment; filename=\"file1.txt\"\r\n" + - "Content-Type: text/plain\r\n" + - "\r\n" + - "... contents of file1.txt ...\r\n" + - "--BbC04y\r\n" + - "Content-disposition: attachment; filename=\"file2.gif\"\r\n" + - "Content-type: image/gif\r\n" + - "Content-Transfer-Encoding: binary\r\n" + - "\r\n" + - "...contents of file2.gif...\r\n" + - "--BbC04y--\r\n" + - "--AaB03x--"; - final List<FileItem> fileItems = Util.parseUpload(upload, request.getBytes(StandardCharsets.US_ASCII), - contentType); - assertEquals(3, fileItems.size()); - final FileItem item0 = fileItems.get(0); - assertEquals("field1", item0.getFieldName()); - assertNull(item0.getName()); - assertEquals("Joe Blow", new String(item0.get())); - final FileItem item1 = fileItems.get(1); - assertEquals("pics", item1.getFieldName()); - assertEquals("file1.txt", item1.getName()); - assertEquals("... contents of file1.txt ...", new String(item1.get())); - final FileItem item2 = fileItems.get(2); - assertEquals("pics", item2.getFieldName()); - assertEquals("file2.gif", item2.getName()); - assertEquals("...contents of file2.gif...", new String(item2.get())); - } - - /** - * Test for <a href="https://issues.apache.org/jira/browse/FILEUPLOAD-111">FILEUPLOAD-111</a> - */ - @ParameterizedTest - @MethodSource("data") - public void testFoldedHeaders(final FileUpload upload) - throws IOException, FileUploadException { - final List<FileItem> fileItems = Util.parseUpload(upload, "-----1234\r\n" + - "Content-Disposition: form-data; name=\"file\"; filename=\"foo.tab\"\r\n" + - "Content-Type: text/whatever\r\n" + - "\r\n" + - "This is the content of the file\n" + - "\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; \r\n" + - "\tname=\"field\"\r\n" + - "\r\n" + - "fieldValue\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data;\r\n" + - " name=\"multi\"\r\n" + - "\r\n" + - "value1\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"multi\"\r\n" + - "\r\n" + - "value2\r\n" + - "-----1234--\r\n"); - assertEquals(4, fileItems.size()); - - final FileItem file = fileItems.get(0); - assertEquals("file", file.getFieldName()); - assertFalse(file.isFormField()); - assertEquals("This is the content of the file\n", file.getString()); - assertEquals("text/whatever", file.getContentType()); - assertEquals("foo.tab", file.getName()); - - final FileItem field = fileItems.get(1); - assertEquals("field", field.getFieldName()); - assertTrue(field.isFormField()); - assertEquals("fieldValue", field.getString()); - - final FileItem multi0 = fileItems.get(2); - assertEquals("multi", multi0.getFieldName()); - assertTrue(multi0.isFormField()); - assertEquals("value1", multi0.getString()); - - final FileItem multi1 = fileItems.get(3); - assertEquals("multi", multi1.getFieldName()); - assertTrue(multi1.isFormField()); - assertEquals("value2", multi1.getString()); - } - - /** - * Test case for <a href="https://issues.apache.org/jira/browse/FILEUPLOAD-130"> - */ - @ParameterizedTest - @MethodSource("data") - public void testFileUpload130(final FileUpload upload) - throws Exception { - final String[] headerNames = { - "SomeHeader", "OtherHeader", "YetAnotherHeader", "WhatAHeader" - }; - final String[] headerValues = { - "present", "Is there", "Here", "Is That" - }; - final List<FileItem> fileItems = Util.parseUpload(upload, - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"file\"; " - + "filename=\"foo.tab\"\r\n" + - "Content-Type: text/whatever\r\n" + - headerNames[0] + ": " + headerValues[0] + "\r\n" + - "\r\n" + - "This is the content of the file\n" + - "\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; \r\n" + - "\tname=\"field\"\r\n" + - headerNames[1] + ": " + headerValues[1] + "\r\n" + - "\r\n" + - "fieldValue\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data;\r\n" + - " name=\"multi\"\r\n" + - headerNames[2] + ": " + headerValues[2] + "\r\n" + - "\r\n" + - "value1\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"multi\"\r\n" + - headerNames[3] + ": " + headerValues[3] + "\r\n" + - "\r\n" + - "value2\r\n" + - "-----1234--\r\n"); - assertEquals(4, fileItems.size()); - - final FileItem file = fileItems.get(0); - assertHeaders(headerNames, headerValues, file, 0); - - final FileItem field = fileItems.get(1); - assertHeaders(headerNames, headerValues, field, 1); - - final FileItem multi0 = fileItems.get(2); - assertHeaders(headerNames, headerValues, multi0, 2); - - final FileItem multi1 = fileItems.get(3); - assertHeaders(headerNames, headerValues, multi1, 3); - } - - /** - * Test for <a href="https://issues.apache.org/jira/browse/FILEUPLOAD-239">FILEUPLOAD-239</a> - */ - @ParameterizedTest - @MethodSource("data") - public void testContentTypeAttachment(final FileUpload upload) - throws IOException, FileUploadException { - final List<FileItem> fileItems = Util.parseUpload(upload, - "-----1234\r\n" + - "content-disposition: form-data; name=\"field1\"\r\n" + - "\r\n" + - "Joe Blow\r\n" + - "-----1234\r\n" + - "content-disposition: form-data; name=\"pics\"\r\n" + - "Content-type: multipart/mixed, boundary=---9876\r\n" + - "\r\n" + - "-----9876\r\n" + - "Content-disposition: attachment; filename=\"file1.txt\"\r\n" + - "Content-Type: text/plain\r\n" + - "\r\n" + - "... contents of file1.txt ...\r\n" + - "-----9876--\r\n" + - "-----1234--\r\n"); - assertEquals(2, fileItems.size()); - - final FileItem field = fileItems.get(0); - assertEquals("field1", field.getFieldName()); - assertTrue(field.isFormField()); - assertEquals("Joe Blow", field.getString()); - - final FileItem file = fileItems.get(1); - assertEquals("pics", file.getFieldName()); - assertFalse(file.isFormField()); - assertEquals("... contents of file1.txt ...", file.getString()); - assertEquals("text/plain", file.getContentType()); - assertEquals("file1.txt", file.getName()); - } - - private void assertHeaders(final String[] pHeaderNames, final String[] pHeaderValues, - final FileItem pItem, final int pIndex) { - for (int i = 0; i < pHeaderNames.length; i++) { - final String value = pItem.getHeaders().getHeader(pHeaderNames[i]); - if (i == pIndex) { - assertEquals(pHeaderValues[i], value); - } else { - assertNull(value); - } - } - } -} diff --git a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/HttpServletRequestFactory.java b/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/HttpServletRequestFactory.java deleted file mode 100644 index 84328b87c3..0000000000 --- a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/HttpServletRequestFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.commons.fileupload2; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.wicket.commons.fileupload2.FileUploadBase; - -final class HttpServletRequestFactory { - - public static HttpServletRequest createHttpServletRequestWithNullContentType() { - final byte[] requestData = "foobar".getBytes(); - return new MockHttpServletRequest( - requestData, - null); - } - - public static HttpServletRequest createValidHttpServletRequest( - final String[] strFileNames) { - // todo - provide a real implementation - - final StringBuilder sbRequestData = new StringBuilder(); - - for (final String strFileName : strFileNames) { - sbRequestData.append(strFileName); - } - - final byte[] requestData = sbRequestData.toString().getBytes(); - - return new MockHttpServletRequest( - requestData, - FileUploadBase.MULTIPART_FORM_DATA); - } - - static public HttpServletRequest createInvalidHttpServletRequest() { - final byte[] requestData = "foobar".getBytes(); - return new MockHttpServletRequest( - requestData, - FileUploadBase.MULTIPART_FORM_DATA); - } - -} diff --git a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/MockHttpServletRequest.java b/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/MockHttpServletRequest.java deleted file mode 100644 index afe16da497..0000000000 --- a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/MockHttpServletRequest.java +++ /dev/null @@ -1,570 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.commons.fileupload2; - -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.security.Principal; -import java.util.Enumeration; -import java.util.Locale; -import java.util.Map; - -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletInputStream; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; - -import org.apache.wicket.commons.fileupload2.FileUploadBase; - -public class MockHttpServletRequest implements HttpServletRequest { - - private final InputStream mmRequestData; - - private long length; - - private final String mStrContentType; - - private int readLimit = -1; - - private final Map<String, String> mHeaders = new java.util.HashMap<>(); - - /** - * Creates a new instance with the given request data - * and content type. - */ - public MockHttpServletRequest( - final byte[] requestData, - final String strContentType) { - this(new ByteArrayInputStream(requestData), - requestData.length, strContentType); - } - - /** - * Creates a new instance with the given request data - * and content type. - */ - public MockHttpServletRequest( - final InputStream requestData, - final long requestLength, - final String strContentType) { - mmRequestData = requestData; - length = requestLength; - mStrContentType = strContentType; - mHeaders.put(FileUploadBase.CONTENT_TYPE, strContentType); - } - - /** - * @see javax.servlet.http.HttpServletRequest#getAuthType() - */ - @Override - public String getAuthType() { - return null; - } - - /** - * @see javax.servlet.http.HttpServletRequest#getCookies() - */ - @Override - public Cookie[] getCookies() { - return null; - } - - /** - * @see javax.servlet.http.HttpServletRequest#getDateHeader(String) - */ - @Override - public long getDateHeader(final String arg0) { - return 0; - } - - /** - * @see javax.servlet.http.HttpServletRequest#getHeader(String) - */ - @Override - public String getHeader(final String headerName) { - return mHeaders.get(headerName); - } - - /** - * @see javax.servlet.http.HttpServletRequest#getHeaders(String) - */ - @Override - public Enumeration<String> getHeaders(final String arg0) { - // todo - implement - return null; - } - - /** - * @see javax.servlet.http.HttpServletRequest#getHeaderNames() - */ - @Override - public Enumeration<String> getHeaderNames() { - // todo - implement - return null; - } - - /** - * @see javax.servlet.http.HttpServletRequest#getIntHeader(String) - */ - @Override - public int getIntHeader(final String arg0) { - return 0; - } - - /** - * @see javax.servlet.http.HttpServletRequest#getMethod() - */ - @Override - public String getMethod() { - return null; - } - - /** - * @see javax.servlet.http.HttpServletRequest#getPathInfo() - */ - @Override - public String getPathInfo() { - return null; - } - - /** - * @see javax.servlet.http.HttpServletRequest#getPathTranslated() - */ - @Override - public String getPathTranslated() { - return null; - } - - /** - * @see javax.servlet.http.HttpServletRequest#getContextPath() - */ - @Override - public String getContextPath() { - return null; - } - - /** - * @see javax.servlet.http.HttpServletRequest#getQueryString() - */ - @Override - public String getQueryString() { - return null; - } - - /** - * @see javax.servlet.http.HttpServletRequest#getRemoteUser() - */ - @Override - public String getRemoteUser() { - return null; - } - - /** - * @see javax.servlet.http.HttpServletRequest#isUserInRole(String) - */ - @Override - public boolean isUserInRole(final String arg0) { - return false; - } - - /** - * @see javax.servlet.http.HttpServletRequest#getUserPrincipal() - */ - @Override - public Principal getUserPrincipal() { - return null; - } - - /** - * @see javax.servlet.http.HttpServletRequest#getRequestedSessionId() - */ - @Override - public String getRequestedSessionId() { - return null; - } - - /** - * @see javax.servlet.http.HttpServletRequest#getRequestURI() - */ - @Override - public String getRequestURI() { - return null; - } - - /** - * @see javax.servlet.http.HttpServletRequest#getRequestURL() - */ - @Override - public StringBuffer getRequestURL() { - return null; - } - - /** - * @see javax.servlet.http.HttpServletRequest#getServletPath() - */ - @Override - public String getServletPath() { - return null; - } - - /** - * @see javax.servlet.http.HttpServletRequest#getSession(boolean) - */ - @Override - public HttpSession getSession(final boolean arg0) { - return null; - } - - /** - * @see javax.servlet.http.HttpServletRequest#getSession() - */ - @Override - public HttpSession getSession() { - return null; - } - - /** - * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdValid() - */ - @Override - public boolean isRequestedSessionIdValid() { - return false; - } - - /** - * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromCookie() - */ - @Override - public boolean isRequestedSessionIdFromCookie() { - return false; - } - - /** - * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromURL() - */ - @Override - public boolean isRequestedSessionIdFromURL() { - return false; - } - - /** - * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromUrl() - * @deprecated - */ - @Override - @Deprecated - public boolean isRequestedSessionIdFromUrl() { - return false; - } - - /** - * @see javax.servlet.ServletRequest#getAttribute(String) - */ - @Override - public Object getAttribute(final String arg0) { - return null; - } - - /** - * @see javax.servlet.ServletRequest#getAttributeNames() - */ - @Override - public Enumeration<String> getAttributeNames() { - return null; - } - - /** - * @see javax.servlet.ServletRequest#getCharacterEncoding() - */ - @Override - public String getCharacterEncoding() { - return null; - } - - /** - * @see javax.servlet.ServletRequest#setCharacterEncoding(String) - */ - @Override - public void setCharacterEncoding(final String arg0) - throws UnsupportedEncodingException { - } - - /** - * @see javax.servlet.ServletRequest#getContentLength() - */ - @Override - public int getContentLength() { - int iLength; - - if (null == mmRequestData) { - iLength = -1; - } else { - if (length > Integer.MAX_VALUE) { - throw new RuntimeException("Value '" + length + "' is too large to be converted to int"); - } - iLength = (int) length; - } - return iLength; - } - - /** - * For testing attack scenarios in SizesTest. - */ - public void setContentLength(final long length) { - this.length = length; - } - - /** - * @see javax.servlet.ServletRequest#getContentType() - */ - @Override - public String getContentType() { - return mStrContentType; - } - - /** - * @see javax.servlet.ServletRequest#getInputStream() - */ - @Override - public ServletInputStream getInputStream() throws IOException { - return new MyServletInputStream(mmRequestData, readLimit); - } - - /** - * Sets the read limit. This can be used to limit the number of bytes to read ahead. - * - * @param readLimit the read limit to use - */ - public void setReadLimit(final int readLimit) { - this.readLimit = readLimit; - } - - /** - * @see javax.servlet.ServletRequest#getParameter(String) - */ - @Override - public String getParameter(final String arg0) { - return null; - } - - /** - * @see javax.servlet.ServletRequest#getParameterNames() - */ - @Override - public Enumeration<String> getParameterNames() { - return null; - } - - /** - * @see javax.servlet.ServletRequest#getParameterValues(String) - */ - @Override - public String[] getParameterValues(final String arg0) { - return null; - } - - /** - * @see javax.servlet.ServletRequest#getParameterMap() - */ - @Override - public Map<String, String[]> getParameterMap() { - return null; - } - - /** - * @see javax.servlet.ServletRequest#getProtocol() - */ - @Override - public String getProtocol() { - return null; - } - - /** - * @see javax.servlet.ServletRequest#getScheme() - */ - @Override - public String getScheme() { - return null; - } - - /** - * @see javax.servlet.ServletRequest#getServerName() - */ - @Override - public String getServerName() { - return null; - } - - /** - * @see javax.servlet.ServletRequest#getLocalName() - */ - @Override - @SuppressWarnings("javadoc") // This is a Servlet 2.4 method - public String getLocalName() { - return null; - } - - /** - * @see javax.servlet.ServletRequest#getServerPort() - */ - @Override - public int getServerPort() { - return 0; - } - - /** - * @see javax.servlet.ServletRequest#getLocalPort() - */ - @Override - @SuppressWarnings("javadoc") // This is a Servlet 2.4 method - public int getLocalPort() { - return 0; - } - - /** - * @see javax.servlet.ServletRequest#getRemotePort() - */ - @Override - @SuppressWarnings("javadoc") // This is a Servlet 2.4 method - public int getRemotePort() { - return 0; - } - - /** - * @see javax.servlet.ServletRequest#getReader() - */ - @Override - public BufferedReader getReader() throws IOException { - return null; - } - - /** - * @see javax.servlet.ServletRequest#getRemoteAddr() - */ - @Override - public String getRemoteAddr() { - return null; - } - - /** - * @see javax.servlet.ServletRequest#getLocalAddr() - */ - @Override - @SuppressWarnings("javadoc") // This is a Servlet 2.4 method - public String getLocalAddr() { - return null; - } - - /** - * @see javax.servlet.ServletRequest#getRemoteHost() - */ - @Override - public String getRemoteHost() { - return null; - } - - /** - * @see javax.servlet.ServletRequest#setAttribute(String, Object) - */ - @Override - public void setAttribute(final String arg0, final Object arg1) { - } - - /** - * @see javax.servlet.ServletRequest#removeAttribute(String) - */ - @Override - public void removeAttribute(final String arg0) { - } - - /** - * @see javax.servlet.ServletRequest#getLocale() - */ - @Override - public Locale getLocale() { - return null; - } - - /** - * @see javax.servlet.ServletRequest#getLocales() - */ - @Override - public Enumeration<Locale> getLocales() { - return null; - } - - /** - * @see javax.servlet.ServletRequest#isSecure() - */ - @Override - public boolean isSecure() { - return false; - } - - /** - * @see javax.servlet.ServletRequest#getRequestDispatcher(String) - */ - @Override - public RequestDispatcher getRequestDispatcher(final String arg0) { - return null; - } - - /** - * @see javax.servlet.ServletRequest#getRealPath(String) - * @deprecated - */ - @Override - @Deprecated - public String getRealPath(final String arg0) { - return null; - } - - private static class MyServletInputStream - extends javax.servlet.ServletInputStream { - - private final InputStream in; - private final int readLimit; - - /** - * Creates a new instance, which returns the given - * streams data. - */ - public MyServletInputStream(final InputStream pStream, final int readLimit) { - in = pStream; - this.readLimit = readLimit; - } - - @Override - public int read() throws IOException { - return in.read(); - } - - @Override - public int read(final byte[] b, final int off, final int len) throws IOException { - if (readLimit > 0) { - return in.read(b, off, Math.min(readLimit, len)); - } - return in.read(b, off, len); - } - - } - -} diff --git a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/ProgressListenerTest.java b/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/ProgressListenerTest.java deleted file mode 100644 index 553aefb4aa..0000000000 --- a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/ProgressListenerTest.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.commons.fileupload2; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; - -import org.apache.wicket.commons.fileupload2.FileItemIterator; -import org.apache.wicket.commons.fileupload2.FileItemStream; -import org.apache.wicket.commons.fileupload2.FileUploadException; -import org.apache.wicket.commons.fileupload2.ProgressListener; -import org.apache.wicket.commons.fileupload2.servlet.ServletFileUpload; -import org.junit.jupiter.api.Test; - -/** - * Tests the {@link ProgressListener}. - */ -public class ProgressListenerTest { - - private static class ProgressListenerImpl implements ProgressListener { - - private final long expectedContentLength; - - private final int expectedItems; - - private Long bytesRead; - - private Integer items; - - ProgressListenerImpl(final long pContentLength, final int pItems) { - expectedContentLength = pContentLength; - expectedItems = pItems; - } - - @Override - public void update(final long pBytesRead, final long pContentLength, final int pItems) { - assertTrue(pBytesRead >= 0 && pBytesRead <= expectedContentLength); - assertTrue(pContentLength == -1 || pContentLength == expectedContentLength); - assertTrue(pItems >= 0 && pItems <= expectedItems); - - assertTrue(bytesRead == null || pBytesRead >= bytesRead.longValue()); - bytesRead = Long.valueOf(pBytesRead); - assertTrue(items == null || pItems >= items.intValue()); - items = Integer.valueOf(pItems); - } - - void checkFinished() { - assertEquals(expectedContentLength, bytesRead.longValue()); - assertEquals(expectedItems, items.intValue()); - } - - } - - /** - * Parse a very long file upload by using a progress listener. - */ - @Test - public void testProgressListener() throws Exception { - final int NUM_ITEMS = 512; - final ByteArrayOutputStream baos = new ByteArrayOutputStream(); - for (int i = 0; i < NUM_ITEMS; i++) { - final String header = "-----1234\r\n" - + "Content-Disposition: form-data; name=\"field" + (i + 1) + "\"\r\n" - + "\r\n"; - baos.write(header.getBytes(StandardCharsets.US_ASCII)); - for (int j = 0; j < 16384 + i; j++) { - baos.write((byte) j); - } - baos.write("\r\n".getBytes(StandardCharsets.US_ASCII)); - } - baos.write("-----1234--\r\n".getBytes(StandardCharsets.US_ASCII)); - final byte[] contents = baos.toByteArray(); - - MockHttpServletRequest request = new MockHttpServletRequest(contents, Constants.CONTENT_TYPE); - runTest(NUM_ITEMS, contents.length, request); - request = new MockHttpServletRequest(contents, Constants.CONTENT_TYPE) { - @Override - public int getContentLength() { - return -1; - } - }; - runTest(NUM_ITEMS, contents.length, request); - } - - private void runTest(final int NUM_ITEMS, final long pContentLength, final MockHttpServletRequest request) throws FileUploadException, IOException { - final ServletFileUpload upload = new ServletFileUpload(); - final ProgressListenerImpl listener = new ProgressListenerImpl(pContentLength, NUM_ITEMS); - upload.setProgressListener(listener); - final FileItemIterator iter = upload.getItemIterator(request); - for (int i = 0; i < NUM_ITEMS; i++) { - final FileItemStream stream = iter.next(); - final InputStream istream = stream.openStream(); - for (int j = 0; j < 16384 + i; j++) { - /** - * This used to be - * assertEquals((byte) j, (byte) istream.read()); - * but this seems to trigger a bug in JRockit, so - * we express the same like this: - */ - final byte b1 = (byte) j; - final byte b2 = (byte) istream.read(); - if (b1 != b2) { - fail("Expected " + b1 + ", got " + b2); - } - } - assertEquals(-1, istream.read()); - istream.close(); - } - assertTrue(!iter.hasNext()); - listener.checkFinished(); - } - -} diff --git a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/SizesTest.java b/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/SizesTest.java deleted file mode 100644 index e9b3ddab01..0000000000 --- a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/SizesTest.java +++ /dev/null @@ -1,292 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.commons.fileupload2; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.util.Iterator; -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.wicket.commons.fileupload2.FileItem; -import org.apache.wicket.commons.fileupload2.FileItemIterator; -import org.apache.wicket.commons.fileupload2.FileItemStream; -import org.apache.wicket.commons.fileupload2.FileUploadException; -import org.apache.wicket.commons.fileupload2.disk.DiskFileItemFactory; -import org.apache.wicket.commons.fileupload2.pub.FileSizeLimitExceededException; -import org.apache.wicket.commons.fileupload2.pub.FileUploadIOException; -import org.apache.wicket.commons.fileupload2.pub.SizeLimitExceededException; -import org.apache.wicket.commons.fileupload2.servlet.ServletFileUpload; -import org.apache.wicket.commons.fileupload2.util.Streams; -import org.junit.jupiter.api.Test; - -/** - * Unit test for items with varying sizes. - */ -public class SizesTest { - - /** - * Runs a test with varying file sizes. - */ - @Test - public void testFileUpload() - throws IOException, FileUploadException { - final ByteArrayOutputStream baos = new ByteArrayOutputStream(); - int add = 16; - int num = 0; - for (int i = 0; i < 16384; i += add) { - if (++add == 32) { - add = 16; - } - final String header = "-----1234\r\n" - + "Content-Disposition: form-data; name=\"field" + (num++) + "\"\r\n" - + "\r\n"; - baos.write(header.getBytes(StandardCharsets.US_ASCII)); - for (int j = 0; j < i; j++) { - baos.write((byte) j); - } - baos.write("\r\n".getBytes(StandardCharsets.US_ASCII)); - } - baos.write("-----1234--\r\n".getBytes(StandardCharsets.US_ASCII)); - - final List<FileItem> fileItems = - Util.parseUpload(new ServletFileUpload(new DiskFileItemFactory()), baos.toByteArray()); - final Iterator<FileItem> fileIter = fileItems.iterator(); - add = 16; - num = 0; - for (int i = 0; i < 16384; i += add) { - if (++add == 32) { - add = 16; - } - final FileItem item = fileIter.next(); - assertEquals("field" + (num++), item.getFieldName()); - final byte[] bytes = item.get(); - assertEquals(i, bytes.length); - for (int j = 0; j < i; j++) { - assertEquals((byte) j, bytes[j]); - } - } - assertTrue(!fileIter.hasNext()); - } - - /** Checks, whether limiting the file size works. - */ - @Test - public void testFileSizeLimit() - throws IOException, FileUploadException { - final String request = - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"file\"; filename=\"foo.tab\"\r\n" + - "Content-Type: text/whatever\r\n" + - "\r\n" + - "This is the content of the file\n" + - "\r\n" + - "-----1234--\r\n"; - - ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory()); - upload.setFileSizeMax(-1); - HttpServletRequest req = new MockHttpServletRequest( - request.getBytes(StandardCharsets.US_ASCII), Constants.CONTENT_TYPE); - List<FileItem> fileItems = upload.parseRequest(req); - assertEquals(1, fileItems.size()); - FileItem item = fileItems.get(0); - assertEquals("This is the content of the file\n", new String(item.get())); - - upload = new ServletFileUpload(new DiskFileItemFactory()); - upload.setFileSizeMax(40); - req = new MockHttpServletRequest(request.getBytes(StandardCharsets.US_ASCII), Constants.CONTENT_TYPE); - fileItems = upload.parseRequest(req); - assertEquals(1, fileItems.size()); - item = fileItems.get(0); - assertEquals("This is the content of the file\n", new String(item.get())); - - upload = new ServletFileUpload(new DiskFileItemFactory()); - upload.setFileSizeMax(30); - req = new MockHttpServletRequest(request.getBytes(StandardCharsets.US_ASCII), Constants.CONTENT_TYPE); - try { - upload.parseRequest(req); - fail("Expected exception."); - } catch (final FileSizeLimitExceededException e) { - assertEquals(30, e.getPermittedSize()); - } - } - - /** Checks, whether a faked Content-Length header is detected. - */ - @Test - public void testFileSizeLimitWithFakedContentLength() - throws IOException, FileUploadException { - final String request = - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"file\"; filename=\"foo.tab\"\r\n" + - "Content-Type: text/whatever\r\n" + - "Content-Length: 10\r\n" + - "\r\n" + - "This is the content of the file\n" + - "\r\n" + - "-----1234--\r\n"; - - ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory()); - upload.setFileSizeMax(-1); - HttpServletRequest req = new MockHttpServletRequest( - request.getBytes(StandardCharsets.US_ASCII), Constants.CONTENT_TYPE); - List<FileItem> fileItems = upload.parseRequest(req); - assertEquals(1, fileItems.size()); - FileItem item = fileItems.get(0); - assertEquals("This is the content of the file\n", new String(item.get())); - - upload = new ServletFileUpload(new DiskFileItemFactory()); - upload.setFileSizeMax(40); - req = new MockHttpServletRequest(request.getBytes(StandardCharsets.US_ASCII), Constants.CONTENT_TYPE); - fileItems = upload.parseRequest(req); - assertEquals(1, fileItems.size()); - item = fileItems.get(0); - assertEquals("This is the content of the file\n", new String(item.get())); - - // provided Content-Length is larger than the FileSizeMax -> handled by ctor - upload = new ServletFileUpload(new DiskFileItemFactory()); - upload.setFileSizeMax(5); - req = new MockHttpServletRequest(request.getBytes(StandardCharsets.US_ASCII), Constants.CONTENT_TYPE); - try { - upload.parseRequest(req); - fail("Expected exception."); - } catch (final FileSizeLimitExceededException e) { - assertEquals(5, e.getPermittedSize()); - } - - // provided Content-Length is wrong, actual content is larger -> handled by LimitedInputStream - upload = new ServletFileUpload(new DiskFileItemFactory()); - upload.setFileSizeMax(15); - req = new MockHttpServletRequest(request.getBytes(StandardCharsets.US_ASCII), Constants.CONTENT_TYPE); - try { - upload.parseRequest(req); - fail("Expected exception."); - } catch (final FileSizeLimitExceededException e) { - assertEquals(15, e.getPermittedSize()); - } - } - - /** Checks, whether the maxSize works. - */ - @Test - public void testMaxSizeLimit() - throws IOException, FileUploadException { - final String request = - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"file1\"; filename=\"foo1.tab\"\r\n" + - "Content-Type: text/whatever\r\n" + - "Content-Length: 10\r\n" + - "\r\n" + - "This is the content of the file\n" + - "\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"file2\"; filename=\"foo2.tab\"\r\n" + - "Content-Type: text/whatever\r\n" + - "\r\n" + - "This is the content of the file\n" + - "\r\n" + - "-----1234--\r\n"; - - final ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory()); - upload.setFileSizeMax(-1); - upload.setSizeMax(200); - - final MockHttpServletRequest req = new MockHttpServletRequest( - request.getBytes(StandardCharsets.US_ASCII), Constants.CONTENT_TYPE); - try { - upload.parseRequest(req); - fail("Expected exception."); - } catch (final SizeLimitExceededException e) { - assertEquals(200, e.getPermittedSize()); - } - } - - @Test - public void testMaxSizeLimitUnknownContentLength() - throws IOException, FileUploadException { - final String request = - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"file1\"; filename=\"foo1.tab\"\r\n" + - "Content-Type: text/whatever\r\n" + - "Content-Length: 10\r\n" + - "\r\n" + - "This is the content of the file\n" + - "\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"file2\"; filename=\"foo2.tab\"\r\n" + - "Content-Type: text/whatever\r\n" + - "\r\n" + - "This is the content of the file\n" + - "\r\n" + - "-----1234--\r\n"; - - final ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory()); - upload.setFileSizeMax(-1); - upload.setSizeMax(300); - - // the first item should be within the max size limit - // set the read limit to 10 to simulate a "real" stream - // otherwise the buffer would be immediately filled - - final MockHttpServletRequest req = new MockHttpServletRequest( - request.getBytes(StandardCharsets.US_ASCII), Constants.CONTENT_TYPE); - req.setContentLength(-1); - req.setReadLimit(10); - - final FileItemIterator it = upload.getItemIterator(req); - assertTrue(it.hasNext()); - - FileItemStream item = it.next(); - assertFalse(item.isFormField()); - assertEquals("file1", item.getFieldName()); - assertEquals("foo1.tab", item.getName()); - - { - final InputStream stream = item.openStream(); - final ByteArrayOutputStream baos = new ByteArrayOutputStream(); - Streams.copy(stream, baos, true); - } - - // the second item is over the size max, thus we expect an error - try { - // the header is still within size max -> this shall still succeed - assertTrue(it.hasNext()); - } catch (final SizeLimitExceededException e) { - fail(); - } - - item = it.next(); - - try { - final InputStream stream = item.openStream(); - final ByteArrayOutputStream baos = new ByteArrayOutputStream(); - Streams.copy(stream, baos, true); - fail(); - } catch (final FileUploadIOException e) { - // expected - } - } - -} diff --git a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/StreamingTest.java b/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/StreamingTest.java deleted file mode 100644 index c6c034d66c..0000000000 --- a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/StreamingTest.java +++ /dev/null @@ -1,288 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.commons.fileupload2; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.FilterInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStreamWriter; -import java.nio.charset.StandardCharsets; -import java.util.Iterator; -import java.util.List; -import javax.servlet.http.HttpServletRequest; - -import org.apache.wicket.commons.fileupload2.FileItem; -import org.apache.wicket.commons.fileupload2.FileItemIterator; -import org.apache.wicket.commons.fileupload2.FileItemStream; -import org.apache.wicket.commons.fileupload2.FileUploadBase; -import org.apache.wicket.commons.fileupload2.FileUploadException; -import org.apache.wicket.commons.fileupload2.InvalidFileNameException; -import org.apache.wicket.commons.fileupload2.MultipartStream; -import org.apache.wicket.commons.fileupload2.disk.DiskFileItemFactory; -import org.apache.wicket.commons.fileupload2.pub.IOFileUploadException; -import org.apache.wicket.commons.fileupload2.servlet.ServletFileUpload; -import org.apache.wicket.commons.fileupload2.servlet.ServletRequestContext; -import org.junit.jupiter.api.Test; - -/** - * Unit test for items with varying sizes. - */ -public class StreamingTest { - - /** - * Tests a file upload with varying file sizes. - */ - @Test - public void testFileUpload() - throws IOException, FileUploadException { - final byte[] request = newRequest(); - final List<FileItem> fileItems = parseUpload(request); - final Iterator<FileItem> fileIter = fileItems.iterator(); - int add = 16; - int num = 0; - for (int i = 0; i < 16384; i += add) { - if (++add == 32) { - add = 16; - } - final FileItem item = fileIter.next(); - assertEquals("field" + (num++), item.getFieldName()); - final byte[] bytes = item.get(); - assertEquals(i, bytes.length); - for (int j = 0; j < i; j++) { - assertEquals((byte) j, bytes[j]); - } - } - assertTrue(!fileIter.hasNext()); - } - - /** - * Tests, whether an invalid request throws a proper - * exception. - */ - @Test - public void testFileUploadException() - throws IOException, FileUploadException { - final byte[] request = newRequest(); - final byte[] invalidRequest = new byte[request.length - 11]; - System.arraycopy(request, 0, invalidRequest, 0, request.length - 11); - try { - parseUpload(invalidRequest); - fail("Expected EndOfStreamException"); - } catch (final IOFileUploadException e) { - assertTrue(e.getCause() instanceof MultipartStream.MalformedStreamException); - } - } - - /** - * Tests, whether an IOException is properly delegated. - */ - @Test - public void testIOException() - throws IOException { - final byte[] request = newRequest(); - final InputStream stream = new FilterInputStream(new ByteArrayInputStream(request)) { - private int num; - @Override - public int read() throws IOException { - if (++num > 123) { - throw new IOException("123"); - } - return super.read(); - } - @Override - public int read(final byte[] pB, final int pOff, final int pLen) - throws IOException { - for (int i = 0; i < pLen; i++) { - final int res = read(); - if (res == -1) { - return i == 0 ? -1 : i; - } - pB[pOff + i] = (byte) res; - } - return pLen; - } - }; - try { - parseUpload(stream, request.length); - fail("Expected IOException"); - } catch (final FileUploadException e) { - assertTrue(e.getCause() instanceof IOException); - assertEquals("123", e.getCause().getMessage()); - } - } - - /** - * Test for FILEUPLOAD-135 - */ - @Test - public void testFILEUPLOAD135() - throws IOException, FileUploadException { - final byte[] request = newShortRequest(); - final ByteArrayInputStream bais = new ByteArrayInputStream(request); - final List<FileItem> fileItems = parseUpload(new InputStream() { - @Override - public int read() - throws IOException - { - return bais.read(); - } - @Override - public int read(final byte[] b, final int off, final int len) throws IOException - { - return bais.read(b, off, Math.min(len, 3)); - } - - }, request.length); - final Iterator<FileItem> fileIter = fileItems.iterator(); - assertTrue(fileIter.hasNext()); - final FileItem item = fileIter.next(); - assertEquals("field", item.getFieldName()); - final byte[] bytes = item.get(); - assertEquals(3, bytes.length); - assertEquals((byte)'1', bytes[0]); - assertEquals((byte)'2', bytes[1]); - assertEquals((byte)'3', bytes[2]); - assertTrue(!fileIter.hasNext()); - } - - private List<FileItem> parseUpload(final byte[] bytes) throws FileUploadException { - return parseUpload(new ByteArrayInputStream(bytes), bytes.length); - } - - private FileItemIterator parseUpload(final int pLength, final InputStream pStream) - throws FileUploadException, IOException { - final String contentType = "multipart/form-data; boundary=---1234"; - - final FileUploadBase upload = new ServletFileUpload(); - upload.setFileItemFactory(new DiskFileItemFactory()); - final HttpServletRequest request = new MockHttpServletRequest(pStream, - pLength, contentType); - - return upload.getItemIterator(new ServletRequestContext(request)); - } - - private List<FileItem> parseUpload(final InputStream pStream, final int pLength) - throws FileUploadException { - final String contentType = "multipart/form-data; boundary=---1234"; - - final FileUploadBase upload = new ServletFileUpload(); - upload.setFileItemFactory(new DiskFileItemFactory()); - final HttpServletRequest request = new MockHttpServletRequest(pStream, - pLength, contentType); - - return upload.parseRequest(new ServletRequestContext(request)); - } - - private String getHeader(final String pField) { - return "-----1234\r\n" - + "Content-Disposition: form-data; name=\"" + pField + "\"\r\n" - + "\r\n"; - - } - - private String getFooter() { - return "-----1234--\r\n"; - } - - private byte[] newShortRequest() throws IOException { - final ByteArrayOutputStream baos = new ByteArrayOutputStream(); - final OutputStreamWriter osw = new OutputStreamWriter(baos, StandardCharsets.US_ASCII); - osw.write(getHeader("field")); - osw.write("123"); - osw.write("\r\n"); - osw.write(getFooter()); - osw.close(); - return baos.toByteArray(); - } - - private byte[] newRequest() throws IOException { - final ByteArrayOutputStream baos = new ByteArrayOutputStream(); - final OutputStreamWriter osw = new OutputStreamWriter(baos, StandardCharsets.US_ASCII); - int add = 16; - int num = 0; - for (int i = 0; i < 16384; i += add) { - if (++add == 32) { - add = 16; - } - osw.write(getHeader("field" + (num++))); - osw.flush(); - for (int j = 0; j < i; j++) { - baos.write((byte) j); - } - osw.write("\r\n"); - } - osw.write(getFooter()); - osw.close(); - return baos.toByteArray(); - } - - /** - * Tests, whether an {@link InvalidFileNameException} is thrown. - */ - @Test - public void testInvalidFileNameException() throws Exception { - final String fileName = "foo.exe\u0000.png"; - final String request = - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"file\"; filename=\"" + fileName + "\"\r\n" + - "Content-Type: text/whatever\r\n" + - "\r\n" + - "This is the content of the file\n" + - "\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"field\"\r\n" + - "\r\n" + - "fieldValue\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"multi\"\r\n" + - "\r\n" + - "value1\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"multi\"\r\n" + - "\r\n" + - "value2\r\n" + - "-----1234--\r\n"; - final byte[] reqBytes = request.getBytes(StandardCharsets.US_ASCII); - - final FileItemIterator fileItemIter = parseUpload(reqBytes.length, new ByteArrayInputStream(reqBytes)); - final FileItemStream fileItemStream = fileItemIter.next(); - try { - fileItemStream.getName(); - fail("Expected exception"); - } catch (final InvalidFileNameException e) { - assertEquals(fileName, e.getName()); - assertEquals(-1, e.getMessage().indexOf(fileName)); - assertTrue(e.getMessage().contains("foo.exe\\0.png")); - } - - try { - parseUpload(reqBytes); - fail("Expected exception"); - } catch (final InvalidFileNameException e) { - assertEquals(fileName, e.getName()); - assertEquals(-1, e.getMessage().indexOf(fileName)); - assertTrue(e.getMessage().contains("foo.exe\\0.png")); - } - } - -} diff --git a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/Util.java b/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/Util.java deleted file mode 100644 index 62b4996098..0000000000 --- a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/Util.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.commons.fileupload2; - -import java.io.UnsupportedEncodingException; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.wicket.commons.fileupload2.FileItem; -import org.apache.wicket.commons.fileupload2.FileUpload; -import org.apache.wicket.commons.fileupload2.FileUploadException; -import org.apache.wicket.commons.fileupload2.disk.DiskFileItemFactory; -import org.apache.wicket.commons.fileupload2.portlet.PortletFileUpload; -import org.apache.wicket.commons.fileupload2.servlet.ServletFileUpload; -import org.apache.wicket.commons.fileupload2.servlet.ServletRequestContext; - -/** - * Test utility methods. - * - * @since 1.4 - */ -public class Util { - - public static List<FileItem> parseUpload(final FileUpload upload, final byte[] bytes) throws FileUploadException { - return parseUpload(upload, bytes, Constants.CONTENT_TYPE); - } - - public static List<FileItem> parseUpload(final FileUpload upload, final byte[] bytes, final String contentType) - throws FileUploadException { - final HttpServletRequest request = new MockHttpServletRequest(bytes, contentType); - return upload.parseRequest(new ServletRequestContext(request)); - } - - public static List<FileItem> parseUpload(final FileUpload upload, final String content) - throws UnsupportedEncodingException, FileUploadException { - final byte[] bytes = content.getBytes(StandardCharsets.US_ASCII); - return parseUpload(upload, bytes, Constants.CONTENT_TYPE); - } - - /** - * Return a list of {@link FileUpload} implementations for parameterized tests. - * @return a list of {@link FileUpload} implementations - */ - public static List<FileUpload> fileUploadImplementations() { - return Arrays.asList( - new ServletFileUpload(new DiskFileItemFactory()), - new PortletFileUpload(new DiskFileItemFactory())); - } -} diff --git a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/jaksrvlt/JakSrvltFileUploadTest.java b/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/jaksrvlt/JakSrvltFileUploadTest.java index d323fd9e21..340dddc117 100644 --- a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/jaksrvlt/JakSrvltFileUploadTest.java +++ b/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/jaksrvlt/JakSrvltFileUploadTest.java @@ -27,7 +27,6 @@ import jakarta.servlet.http.HttpServletRequest; import org.apache.wicket.commons.fileupload2.Constants; import org.apache.wicket.commons.fileupload2.FileItem; -import org.apache.wicket.commons.fileupload2.FileUploadTest; import org.apache.wicket.commons.fileupload2.disk.DiskFileItemFactory; import org.apache.wicket.commons.fileupload2.jaksrvlt.JakSrvltFileUpload; import org.junit.jupiter.api.Test; @@ -35,7 +34,6 @@ import org.junit.jupiter.api.Test; /** * Test for {@link org.apache.wicket.commons.fileupload2.servlet.ServletFileUpload}. * - * @see FileUploadTest * @since 1.4 */ public class JakSrvltFileUploadTest { diff --git a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/portlet/MockPortletActionRequest.java b/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/portlet/MockPortletActionRequest.java deleted file mode 100644 index c23b0d1712..0000000000 --- a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/portlet/MockPortletActionRequest.java +++ /dev/null @@ -1,272 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.commons.fileupload2.portlet; - -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.security.Principal; -import java.util.Arrays; -import java.util.Collections; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Hashtable; -import java.util.Locale; -import java.util.Map; - -import javax.portlet.ActionRequest; -import javax.portlet.PortalContext; -import javax.portlet.PortletMode; -import javax.portlet.PortletPreferences; -import javax.portlet.PortletSession; -import javax.portlet.WindowState; - -import org.apache.wicket.commons.fileupload2.FileUploadBase; - -/** - * Mock class for tests. Implements an {@link ActionRequest}. - * - * @see PortletFileUploadTest - * @since 1.4 - */ -@SuppressWarnings("rawtypes") // because of the portlet ActionRequest API does not use generics -public class MockPortletActionRequest implements ActionRequest { - - private final Hashtable<String, Object> attributes = new Hashtable<>(); - - private final Map<String, String> parameters = new HashMap<>(); - - private String characterEncoding; - private final int length; - private final String contentType; - private final InputStream requestData; - - public MockPortletActionRequest(final byte[] requestData, final String contentType) { - this(new ByteArrayInputStream(requestData), requestData.length, contentType); - } - - public MockPortletActionRequest(final ByteArrayInputStream byteArrayInputStream, - final int requestLength, final String contentType) { - this.requestData = byteArrayInputStream; - length = requestLength; - this.contentType = contentType; - attributes.put(FileUploadBase.CONTENT_TYPE, contentType); - } - - @Override - public Object getAttribute(final String key) { - return attributes.get(key); - } - - @Override - public Enumeration getAttributeNames() { - return attributes.keys(); - } - - @Override - public String getAuthType() { - return null; - } - - @Override - public String getContextPath() { - return null; - } - - @Override - public Locale getLocale() { - return Locale.getDefault(); - } - - @Override - public Enumeration getLocales() { - return Collections.enumeration(Arrays.asList(Locale.getAvailableLocales())); - } - - @Override - public String getParameter(final String key) { - return parameters.get(key); - } - - @Override - public Map getParameterMap() { - return Collections.unmodifiableMap(parameters); - } - - @Override - public Enumeration getParameterNames() { - return Collections.enumeration(parameters.keySet()); - } - - @Override - public String[] getParameterValues(final String arg0) { - return null; - } - - @Override - public PortalContext getPortalContext() { - return null; - } - - @Override - public PortletMode getPortletMode() { - return null; - } - - @Override - public PortletSession getPortletSession() { - return null; - } - - @Override - public PortletSession getPortletSession(final boolean arg0) { - return null; - } - - @Override - public PortletPreferences getPreferences() { - return null; - } - - @Override - public Enumeration getProperties(final String arg0) { - return null; - } - - @Override - public String getProperty(final String arg0) { - return null; - } - - @Override - public Enumeration getPropertyNames() { - return null; - } - - @Override - public String getRemoteUser() { - return null; - } - - @Override - public String getRequestedSessionId() { - return null; - } - - @Override - public String getResponseContentType() { - return null; - } - - @Override - public Enumeration getResponseContentTypes() { - return null; - } - - @Override - public String getScheme() { - return null; - } - - @Override - public String getServerName() { - return null; - } - - @Override - public int getServerPort() { - return 0; - } - - @Override - public Principal getUserPrincipal() { - return null; - } - - @Override - public WindowState getWindowState() { - return null; - } - - @Override - public boolean isPortletModeAllowed(final PortletMode arg0) { - return false; - } - - @Override - public boolean isRequestedSessionIdValid() { - return false; - } - - @Override - public boolean isSecure() { - return false; - } - - @Override - public boolean isUserInRole(final String arg0) { - return false; - } - - @Override - public boolean isWindowStateAllowed(final WindowState arg0) { - return false; - } - - @Override - public void removeAttribute(final String key) { - attributes.remove(key); - } - - @Override - public void setAttribute(final String key, final Object value) { - attributes.put(key, value); - } - - @Override - public String getCharacterEncoding() { - return characterEncoding; - } - - @Override - public int getContentLength() { - return length; - } - - @Override - public String getContentType() { - return contentType; - } - - @Override - public InputStream getPortletInputStream() throws IOException { - return requestData; - } - - @Override - public BufferedReader getReader() throws UnsupportedEncodingException, IOException { - return null; - } - - @Override - public void setCharacterEncoding(final String characterEncoding) throws UnsupportedEncodingException { - this.characterEncoding = characterEncoding; - } - -} diff --git a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/portlet/PortletFileUploadTest.java b/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/portlet/PortletFileUploadTest.java deleted file mode 100644 index 8ccb728215..0000000000 --- a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/portlet/PortletFileUploadTest.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.commons.fileupload2.portlet; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import java.nio.charset.StandardCharsets; -import java.util.List; -import java.util.Map; - -import javax.portlet.ActionRequest; - -import org.apache.wicket.commons.fileupload2.Constants; -import org.apache.wicket.commons.fileupload2.FileItem; -import org.apache.wicket.commons.fileupload2.FileUploadTest; -import org.apache.wicket.commons.fileupload2.disk.DiskFileItemFactory; -import org.apache.wicket.commons.fileupload2.portlet.PortletFileUpload; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -/** - * Test for {@link PortletFileUpload}. - * - * @see FileUploadTest - * @since 1.4 - */ -public class PortletFileUploadTest { - - private PortletFileUpload upload; - - @BeforeEach - public void setUp() { - upload = new PortletFileUpload(new DiskFileItemFactory()); - } - - @Test - public void parseParameterMap() - throws Exception { - final String text = "-----1234\r\n" + - "Content-Disposition: form-data; name=\"file\"; filename=\"foo.tab\"\r\n" + - "Content-Type: text/whatever\r\n" + - "\r\n" + - "This is the content of the file\n" + - "\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"field\"\r\n" + - "\r\n" + - "fieldValue\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"multi\"\r\n" + - "\r\n" + - "value1\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"multi\"\r\n" + - "\r\n" + - "value2\r\n" + - "-----1234--\r\n"; - final byte[] bytes = text.getBytes(StandardCharsets.US_ASCII); - final ActionRequest request = new MockPortletActionRequest(bytes, Constants.CONTENT_TYPE); - - final Map<String, List<FileItem>> mappedParameters = upload.parseParameterMap(request); - assertTrue(mappedParameters.containsKey("file")); - assertEquals(1, mappedParameters.get("file").size()); - - assertTrue(mappedParameters.containsKey("field")); - assertEquals(1, mappedParameters.get("field").size()); - - assertTrue(mappedParameters.containsKey("multi")); - assertEquals(2, mappedParameters.get("multi").size()); - } - -} diff --git a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/servlet/ServletFileUploadTest.java b/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/servlet/ServletFileUploadTest.java deleted file mode 100644 index 69c36aef2e..0000000000 --- a/wicket-commons-fileupload/src/test/java/org/apache/wicket/commons/fileupload2/servlet/ServletFileUploadTest.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.commons.fileupload2.servlet; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import java.nio.charset.StandardCharsets; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.wicket.commons.fileupload2.Constants; -import org.apache.wicket.commons.fileupload2.FileItem; -import org.apache.wicket.commons.fileupload2.FileUploadTest; -import org.apache.wicket.commons.fileupload2.MockHttpServletRequest; -import org.apache.wicket.commons.fileupload2.disk.DiskFileItemFactory; -import org.apache.wicket.commons.fileupload2.servlet.ServletFileUpload; -import org.junit.jupiter.api.Test; - -/** - * Test for {@link ServletFileUpload}. - * - * @see FileUploadTest - * @since 1.4 - */ -public class ServletFileUploadTest { - - /** - * Test case for <a href="https://issues.apache.org/jira/browse/FILEUPLOAD-210"> - */ - @Test - public void parseParameterMap() - throws Exception { - final String text = "-----1234\r\n" + - "Content-Disposition: form-data; name=\"file\"; filename=\"foo.tab\"\r\n" + - "Content-Type: text/whatever\r\n" + - "\r\n" + - "This is the content of the file\n" + - "\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"field\"\r\n" + - "\r\n" + - "fieldValue\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"multi\"\r\n" + - "\r\n" + - "value1\r\n" + - "-----1234\r\n" + - "Content-Disposition: form-data; name=\"multi\"\r\n" + - "\r\n" + - "value2\r\n" + - "-----1234--\r\n"; - final byte[] bytes = text.getBytes(StandardCharsets.US_ASCII); - final HttpServletRequest request = new MockHttpServletRequest(bytes, Constants.CONTENT_TYPE); - - final ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory()); - final Map<String, List<FileItem>> mappedParameters = upload.parseParameterMap(request); - assertTrue(mappedParameters.containsKey("file")); - assertEquals(1, mappedParameters.get("file").size()); - - assertTrue(mappedParameters.containsKey("field")); - assertEquals(1, mappedParameters.get("field").size()); - - assertTrue(mappedParameters.containsKey("multi")); - assertEquals(2, mappedParameters.get("multi").size()); - } - - - @Test - public void parseImpliedUtf8() - throws Exception { - // utf8 encoded form-data without explicit content-type encoding - final String text = "-----1234\r\n" + - "Content-Disposition: form-data; name=\"utf8Html\"\r\n" + - "\r\n" + - "Thís ís the coñteñt of the fíle\n" + - "\r\n" + - "-----1234--\r\n"; - - final byte[] bytes = text.getBytes(StandardCharsets.UTF_8); - final HttpServletRequest request = new MockHttpServletRequest(bytes, Constants.CONTENT_TYPE); - - final DiskFileItemFactory fileItemFactory = new DiskFileItemFactory(); - fileItemFactory.setDefaultCharset("UTF-8"); - final ServletFileUpload upload = new ServletFileUpload(fileItemFactory); - final List<FileItem> fileItems = upload.parseRequest(request); - final FileItem fileItem = fileItems.get(0); - assertTrue(fileItem.getString().contains("coñteñt"), fileItem.getString()); - } -} diff --git a/wicket-core/pom.xml b/wicket-core/pom.xml index 583cc0727e..eb73608f28 100644 --- a/wicket-core/pom.xml +++ b/wicket-core/pom.xml @@ -28,11 +28,11 @@ <name>Wicket Core</name> <description> Wicket is a Java web application framework that takes simplicity, - separation of concerns and ease of development to a whole new level. - Wicket pages can be mocked up, previewed and later revised using - standard WYSIWYG HTML design tools. Dynamic content processing and - form handling is all handled in Java code using a first-class - component model backed by POJO data beans that can easily be + separation of concerns and ease of development to a whole new level. + Wicket pages can be mocked up, previewed and later revised using + standard WYSIWYG HTML design tools. Dynamic content processing and + form handling is all handled in Java code using a first-class + component model backed by POJO data beans that can easily be persisted using your favorite technology. </description> <properties> @@ -143,7 +143,7 @@ org.apache.wicket.util.template;-noimport:=true, org.apache.wicket.util.tester;-noimport:=true, org.apache.wicket.validation;-noimport:=true, org.apache.wicket.validation.validator;-noimport:=true - </osgi.export.package> + </osgi.export.package> <osgi.import.package>!java*,!kotlin*,!sun.nio.ch,!com.sun.crypto.provider,org.slf4j*;version="[1.7,3)",jakarta.servlet,jakarta.servlet.http,*</osgi.import.package> </properties> <dependencies> @@ -161,6 +161,10 @@ org.apache.wicket.validation.validator;-noimport:=true <groupId>com.github.openjson</groupId> <artifactId>openjson</artifactId> </dependency> + <dependency> + <groupId>org.apache.wicket</groupId> + <artifactId>wicket-commons-fileupload</artifactId> + </dependency> <dependency> <groupId>org.apache.wicket</groupId> <artifactId>wicket-request</artifactId> diff --git a/wicket-util/pom.xml b/wicket-util/pom.xml index 801f8282d9..0368b81135 100755 --- a/wicket-util/pom.xml +++ b/wicket-util/pom.xml @@ -48,7 +48,6 @@ <dependency> <groupId>org.apache.wicket</groupId> <artifactId>wicket-commons-fileupload</artifactId> - <version>${project.version}</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId>