-
Notifications
You must be signed in to change notification settings - Fork 173
Commit
for compliance with Jakarta Servlet API 5.0. (See #25.)
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -21,7 +21,7 @@ | |
<parent> | ||
<groupId>org.apache.commons</groupId> | ||
<artifactId>commons-parent</artifactId> | ||
<version>48</version> | ||
<version>50</version> | ||
</parent> | ||
|
||
<artifactId>commons-fileupload2</artifactId> | ||
|
@@ -250,6 +250,12 @@ | |
<artifactId>commons-io</artifactId> | ||
<version>2.2</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>jakarta.servlet</groupId> | ||
<artifactId>jakarta.servlet-api</artifactId> | ||
<version>5.0.0-M1</version> | ||
<scope>provided</scope> | ||
</dependency> | ||
</dependencies> | ||
|
||
<build> | ||
|
@@ -332,6 +338,7 @@ | |
</plugin> | ||
</plugins> | ||
</pluginManagement> | ||
<defaultGoal>clean verify apache-rat:check clirr:check javadoc:javadoc</defaultGoal> | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
jochenw
Author
Contributor
|
||
</build> | ||
|
||
<reporting> | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,153 @@ | ||
/* | ||
* 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.commons.fileupload2.jaksrvlt; | ||
|
||
import java.io.IOException; | ||
import java.util.List; | ||
import java.util.Map; | ||
|
||
import jakarta.servlet.http.HttpServletRequest; | ||
|
||
import org.apache.commons.fileupload2.FileItem; | ||
import org.apache.commons.fileupload2.FileItemFactory; | ||
import org.apache.commons.fileupload2.FileItemIterator; | ||
import org.apache.commons.fileupload2.FileUpload; | ||
import org.apache.commons.fileupload2.FileUploadBase; | ||
import org.apache.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.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 JakSrvltFileUpload 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( | ||
HttpServletRequest request) { | ||
if (!POST_METHOD.equalsIgnoreCase(request.getMethod())) { | ||
return false; | ||
} | ||
return FileUploadBase.isMultipartContent(new JakSrvltRequestContext(request)); | ||
} | ||
|
||
// ----------------------------------------------------------- Constructors | ||
|
||
/** | ||
* Constructs an uninitialised instance of this class. A factory must be | ||
* configured, using {@code setFileItemFactory()}, before attempting | ||
* to parse requests. | ||
* | ||
* @see FileUpload#FileUpload(FileItemFactory) | ||
*/ | ||
public JakSrvltFileUpload() { | ||
super(); | ||
} | ||
|
||
/** | ||
* 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 JakSrvltFileUpload(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(HttpServletRequest request) throws FileUploadException { | ||
return parseRequest(new JakSrvltRequestContext(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(HttpServletRequest request) | ||
throws FileUploadException { | ||
return parseParameterMap(new JakSrvltRequestContext(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(HttpServletRequest request) | ||
throws FileUploadException, IOException { | ||
return super.getItemIterator(new JakSrvltRequestContext(request)); | ||
} | ||
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
/* | ||
* 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.commons.fileupload2.jaksrvlt; | ||
|
||
import static java.lang.String.format; | ||
|
||
import java.io.IOException; | ||
import java.io.InputStream; | ||
|
||
import jakarta.servlet.http.HttpServletRequest; | ||
|
||
import org.apache.commons.fileupload2.FileUploadBase; | ||
import org.apache.commons.fileupload2.UploadContext; | ||
|
||
/** | ||
* <p>Provides access to the request information needed for a request made to | ||
* an HTTP servlet.</p> | ||
* | ||
* @since FileUpload 1.1 | ||
*/ | ||
public class JakSrvltRequestContext 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 JakSrvltRequestContext(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 (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", | ||
Long.valueOf(this.contentLength()), | ||
this.getContentType()); | ||
} | ||
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
/* | ||
* 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.commons.fileupload2.FileUpload FileUpload} | ||
* for use in servlets conforming to the namespace {@code jakarta.servlet}. | ||
* | ||
* </p> | ||
* <p> | ||
* The following code fragment demonstrates typical usage. | ||
* </p> | ||
* <pre> | ||
* DiskFileItemFactory factory = new DiskFileItemFactory(); | ||
* // Configure the factory here, if desired. | ||
* JakSrvltFileUpload upload = new JakSrvltFileUpload(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.commons.fileupload2.jaksrvlt; |
Seriously?