From ef4bc1948c36fee32114ce1b5b5d12499ad693b8 Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Tue, 19 Jan 2016 17:43:06 +0000 Subject: [PATCH] 1298: Workspace: Update public link generation Task-Url: https://support.d4science.org/issues/1298 Updated as following: In case of error on decrypt or get input stream a 404 error is sent In case of error on get Metadata (from storage), file is download with default value for name and mime type git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/data-transfer/uri-resolver@122326 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../resolver/http/StorageIDResolver.java | 41 ++++++++++++------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/gcube/datatransfer/resolver/http/StorageIDResolver.java b/src/main/java/org/gcube/datatransfer/resolver/http/StorageIDResolver.java index 9961e1f..a55a061 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/http/StorageIDResolver.java +++ b/src/main/java/org/gcube/datatransfer/resolver/http/StorageIDResolver.java @@ -20,11 +20,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; + /** * The Class StorageIDResolver. * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * Sep 21, 2015 + * Jan 19, 2016 */ public class StorageIDResolver extends HttpServlet { @@ -90,17 +91,38 @@ public class StorageIDResolver extends HttpServlet { logger.info(SMP_ID+" = "+ smpID); InputStream in = null; - try { + String toSEID = null; + try { OutputStream out = response.getOutputStream(); + StorageClient client = new StorageClient(StorageIDResolver.class.getName(), StorageIDResolver.class.getSimpleName(), StorageIDResolver.class.getName(), AccessType.PUBLIC); try{ - StorageClient client = new StorageClient(StorageIDResolver.class.getName(), StorageIDResolver.class.getSimpleName(), StorageIDResolver.class.getName(), AccessType.PUBLIC); IClient icClient = client.getClient(); - String toSEID = icClient.getId(smpID); //to Storage Encrypted ID + toSEID = icClient.getId(smpID); //to Storage Encrypted ID logger.debug("Decoded ID"+" = "+ toSEID); + + if(toSEID==null){ + String error = "Decrypted id is null, thrown exception!"; + throw new Exception(error); + } + in=icClient.get().RFileAsInputStream(toSEID); //input stream + }catch (Exception e) { + response.sendError(404); + logger.error("Storage Client Exception when getting file from storage: ", e); + return; + } + + //CASE InputStream NULL + if(in==null){ + logger.error("Input stream returned from storage is null, sending status error 404"); + sendErrorQuietly(response, 404); + return; + } + + try{ MyFile file = client.getClient().getMetaFile().RFile(toSEID); logger.debug("MetaFile retrieved from storage? "+ (file!=null)); @@ -115,16 +137,7 @@ public class StorageIDResolver extends HttpServlet { } }catch (Exception e) { - response.sendError(404); - logger.error("Storage Client Exception:", e); - return; - } - - //CASE InputStream NULL - if(in==null){ - logger.warn("Input stream is null, sending status error 404"); - sendErrorQuietly(response, 404); - return; + logger.warn("Error when getting file metadata from storage, printing this warning and trying to continue..", e); } //VALIDATING PARAMETERS: FILENAME AND CONTENT TYPE