diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FedoraDatastreamController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FedoraDatastreamController.java index 34e33a36f..c1221087b 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FedoraDatastreamController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FedoraDatastreamController.java @@ -20,7 +20,6 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.joda.time.DateTime; @@ -221,12 +220,9 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons public void doPost(HttpServletRequest rawRequest, HttpServletResponse res) throws ServletException,IOException { try{ - FileUploadServletRequest req = null; - try { - req = FileUploadServletRequest - .parseRequest(rawRequest, maxFileSize); - } catch (FileUploadException e) { - throw new FdcException("Size limit exceeded: " + e.getLocalizedMessage()); + FileUploadServletRequest req = FileUploadServletRequest.parseRequest(rawRequest, maxFileSize); + if (req.hasFileUploadException()) { + throw new FdcException("Size limit exceeded: " + req.getFileUploadException().getLocalizedMessage()); } if (!req.isMultipart()) { throw new FdcException("Must POST a multipart encoded request"); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/N3MultiPartUpload.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/N3MultiPartUpload.java index e6abc28ec..babaf6e1f 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/N3MultiPartUpload.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/N3MultiPartUpload.java @@ -19,7 +19,6 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -115,14 +114,11 @@ public class N3MultiPartUpload extends VitroHttpServlet { throws ServletException, IOException { log.debug("N3MultiPartProcess 0.01"); - FileUploadServletRequest request = null; - try { - request = FileUploadServletRequest - .parseRequest(rawRequest, maxFileSize); - } catch (FileUploadException e) { + FileUploadServletRequest request = FileUploadServletRequest.parseRequest(rawRequest, maxFileSize); + if (request.hasFileUploadException()) { // TODO: forward to error message - throw new ServletException("Size limit exceeded: " + e.getLocalizedMessage()); - } + throw new ServletException("Size limit exceeded: " + request.getFileUploadException().getLocalizedMessage()); + } if (!request.isMultipart()) { // TODO: forward to error message throw new ServletException("Must POST a multipart encoded request"); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/JenaXMLFileUpload.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/JenaXMLFileUpload.java index dbfb47ce5..0a3f0b17b 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/JenaXMLFileUpload.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/JenaXMLFileUpload.java @@ -24,7 +24,6 @@ import net.sf.saxon.s9api.XsltExecutable; import net.sf.saxon.s9api.XsltTransformer; import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -90,13 +89,10 @@ public class JenaXMLFileUpload extends BaseEditController { */ public void doPost(HttpServletRequest rawRequest, HttpServletResponse resp) throws ServletException, IOException { - FileUploadServletRequest request = null; - try { - request = FileUploadServletRequest - .parseRequest(rawRequest, maxFileSize); - } catch (FileUploadException e) { - // TODO: forward to error message - throw new ServletException("Size limit exceeded: " + e.getLocalizedMessage()); + FileUploadServletRequest request = FileUploadServletRequest.parseRequest(rawRequest, maxFileSize); + if (request.hasFileUploadException()) { + throw new ServletException("Size limit exceeded: " + + request.getFileUploadException().getLocalizedMessage()); } if (request.isMultipart()) { log.debug("multipart content detected"); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/RDFUploadController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/RDFUploadController.java index c359050d9..bf293e89d 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/RDFUploadController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/RDFUploadController.java @@ -15,7 +15,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -45,12 +44,10 @@ public class RDFUploadController extends BaseEditController { public void doPost(HttpServletRequest rawRequest, HttpServletResponse response) throws ServletException, IOException { - FileUploadServletRequest req = null; - try { - req = FileUploadServletRequest.parseRequest(rawRequest, - maxFileSizeInBytes); - } catch (FileUploadException e) { - forwardToFileUploadError(e.getLocalizedMessage(), req, response); + FileUploadServletRequest req = FileUploadServletRequest.parseRequest(rawRequest, + maxFileSizeInBytes); + if (req.hasFileUploadException()) { + forwardToFileUploadError(req.getFileUploadException().getLocalizedMessage(), req, response); return; } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/FileUploadServletRequest.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/FileUploadServletRequest.java index 2e3be3253..499744f9c 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/FileUploadServletRequest.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/FileUploadServletRequest.java @@ -35,15 +35,25 @@ import org.apache.commons.fileupload.servlet.ServletFileUpload; * uploaded in a given field, the length of the file will be 0. *
*
- * Most methods are declared here, and simply delegate to the wrapped request.
- * Methods that have to do with parameters or files are handled differently for
- * simple requests and multipart request, and are implemented in the
- * sub-classes.
+ * If the uploaded file(s) would be larger than the maxFileSize
,
+ * {@link #parseRequest(HttpServletRequest, int)} does not throw an Exception.
+ * Instead, it records the exception in a request attribute named by
+ * {@link #FILE_UPLOAD_EXCEPTION}. This attribute can be accessed directly, or
+ * indirectly via the methods {@link #hasFileUploadException()} and
+ * {@link #getFileUploadException()}. If there is an exception, the file item
+ * map (see above) will still be non-null, but it will be empty.
+ *
+ * Most methods are declared here simply delegate to the wrapped request. + * Methods that have to do with parameters, files, or parsing exceptions, are + * handled differently for simple requests and multipart request, and are + * implemented in the sub-classes. *
*/ @SuppressWarnings("deprecation") public abstract class FileUploadServletRequest implements HttpServletRequest { public static final String FILE_ITEM_MAP = "file_item_map"; + public static final String FILE_UPLOAD_EXCEPTION = "file_upload_exception"; // ---------------------------------------------------------------------- // The factory method @@ -53,8 +63,7 @@ public abstract class FileUploadServletRequest implements HttpServletRequest { * Wrap this {@link HttpServletRequest} in an appropriate wrapper class. */ public static FileUploadServletRequest parseRequest( - HttpServletRequest request, int maxFileSize) throws IOException, - FileUploadException { + HttpServletRequest request, int maxFileSize) throws IOException { boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart) { return new MultipartHttpServletRequest(request, maxFileSize); @@ -97,6 +106,17 @@ public abstract class FileUploadServletRequest implements HttpServletRequest { */ public abstract FileItem getFileItem(String string); + /** + * Was there an exception when uploading the file items? + */ + public abstract boolean hasFileUploadException(); + + /** + * Get the exception that occurred when uploading the file items. If no such + * exception, returnnull
.
+ */
+ public abstract FileUploadException getFileUploadException();
+
// ----------------------------------------------------------------------
// Delegated methods.
// ----------------------------------------------------------------------
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/MultipartHttpServletRequest.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/MultipartHttpServletRequest.java
index aa9f78582..305fd6a43 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/MultipartHttpServletRequest.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/MultipartHttpServletRequest.java
@@ -37,13 +37,14 @@ class MultipartHttpServletRequest extends FileUploadServletRequest {
private final Map