From 8916aa18effa0d3836c7f540ffad73bc49e3acb3 Mon Sep 17 00:00:00 2001 From: bbpennel Date: Fri, 22 Nov 2013 13:20:09 -0500 Subject: [PATCH 1/2] Changed version of commons-fileupload to 1.3, which fixes issues retrieving filenames in multipart requests with multiple file uploads. Updated SwordAPIEndpoint to match the change --- pom.xml | 2 +- .../java/org/swordapp/server/SwordAPIEndpoint.java | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 26597f6..060c20a 100644 --- a/pom.xml +++ b/pom.xml @@ -177,7 +177,7 @@ commons-fileupload commons-fileupload - 1.2.1 + 1.3 com.hp.hpl.jena diff --git a/src/main/java/org/swordapp/server/SwordAPIEndpoint.java b/src/main/java/org/swordapp/server/SwordAPIEndpoint.java index a5a8358..d93d094 100644 --- a/src/main/java/org/swordapp/server/SwordAPIEndpoint.java +++ b/src/main/java/org/swordapp/server/SwordAPIEndpoint.java @@ -6,10 +6,10 @@ import org.apache.abdera.model.Entry; import org.apache.abdera.parser.Parser; import org.apache.commons.codec.binary.Base64; +import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.ParameterParser; -import org.apache.commons.fileupload.disk.DiskFileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.log4j.Logger; @@ -254,8 +254,8 @@ protected void addDepositPropertiesFromMultipart(Deposit deposit, HttpServletReq throws ServletException, IOException, SwordError { // Parse the request for files (using the fileupload commons library) - List items = this.getPartsFromRequest(req); - for (DiskFileItem item : items) + List items = this.getPartsFromRequest(req); + for (FileItem item : items) { // find out which part we are looking at String contentDisposition = item.getHeaders().getHeader("Content-Disposition"); @@ -453,7 +453,7 @@ protected String getContentDispositionValue(String contentDisposition, String ke return parameters.get(key); } - protected List getPartsFromRequest(HttpServletRequest request) + protected List getPartsFromRequest(HttpServletRequest request) throws ServletException { try @@ -465,7 +465,7 @@ protected List getPartsFromRequest(HttpServletRequest request) ServletFileUpload upload = new ServletFileUpload(factory); // Parse the request - List items = upload.parseRequest(request); + List items = upload.parseRequest(request); return items; } From ad46791ba83fecba3d68bd5b068b943ffa296fdc Mon Sep 17 00:00:00 2001 From: bbpennel Date: Fri, 22 Nov 2013 14:00:08 -0500 Subject: [PATCH 2/2] MetadataResourceAPI closing input stream in finally block to ensure it closes when exceptions occur. Added null checks on packaging and mediaType when generating atom statement --- src/main/java/org/swordapp/server/AtomStatement.java | 11 +++++++---- .../java/org/swordapp/server/MediaResourceAPI.java | 10 +++++++--- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/swordapp/server/AtomStatement.java b/src/main/java/org/swordapp/server/AtomStatement.java index 96c170b..fa38b05 100644 --- a/src/main/java/org/swordapp/server/AtomStatement.java +++ b/src/main/java/org/swordapp/server/AtomStatement.java @@ -84,7 +84,8 @@ public void writeTo(Writer out) entry.setSummary("Original Deposit"); entry.setUpdated(new Date()); - entry.setContent(new IRI(deposit.getUri()), deposit.getMediaType()); + if (deposit.getMediaType() != null) + entry.setContent(new IRI(deposit.getUri()), deposit.getMediaType()); entry.addCategory(UriRegistry.SWORD_TERMS_NAMESPACE, UriRegistry.SWORD_ORIGINAL_DEPOSIT, "Original Deposit"); if (deposit.getDepositedOn() != null) { @@ -102,9 +103,11 @@ public void writeTo(Writer out) entry.addSimpleExtension(new QName(UriRegistry.SWORD_DEPOSITED_BY), deposit.getDepositedBy()); } - for (String packaging : deposit.getPackaging()) - { - entry.addSimpleExtension(UriRegistry.SWORD_PACKAGING, packaging); + if (deposit.getPackaging() != null) { + for (String packaging : deposit.getPackaging()) + { + entry.addSimpleExtension(UriRegistry.SWORD_PACKAGING, packaging); + } } } diff --git a/src/main/java/org/swordapp/server/MediaResourceAPI.java b/src/main/java/org/swordapp/server/MediaResourceAPI.java index b8d2d5e..5a8b016 100644 --- a/src/main/java/org/swordapp/server/MediaResourceAPI.java +++ b/src/main/java/org/swordapp/server/MediaResourceAPI.java @@ -116,9 +116,13 @@ public void get(HttpServletRequest req, HttpServletResponse resp, boolean sendBo { OutputStream out = resp.getOutputStream(); InputStream in = resource.getInputStream(); - this.copyInputToOutput(in, out); - out.flush(); - in.close(); + try { + this.copyInputToOutput(in, out); + out.flush(); + } finally { + if (in != null) + in.close(); + } } } catch (SwordError se)