From 0932c9489d411271c63e3f4361a55bc00ebd0857 Mon Sep 17 00:00:00 2001 From: milanmajchrak Date: Tue, 1 Apr 2025 13:47:10 +0200 Subject: [PATCH 1/3] Refactored the method for extracting the file and added it into try catch block --- .../content/PreviewContentServiceImpl.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/dspace-api/src/main/java/org/dspace/content/PreviewContentServiceImpl.java b/dspace-api/src/main/java/org/dspace/content/PreviewContentServiceImpl.java index a9b1acb81edf..3252a9574233 100644 --- a/dspace-api/src/main/java/org/dspace/content/PreviewContentServiceImpl.java +++ b/dspace-api/src/main/java/org/dspace/content/PreviewContentServiceImpl.java @@ -209,16 +209,15 @@ public List processInputStreamToFilePreview(Context context, Bitstream fileInfos.add(new FileInfo(data, false)); } else { String data = ""; - if (bitstream.getFormat(context).getMIMEType().equals("application/zip")) { - data = extractFile(inputStream, ARCHIVE_TYPE_ZIP); - try { - fileInfos = FileTreeViewGenerator.parse(data); - } catch (Exception e) { - log.error("Cannot extract file content because: {}", e.getMessage()); - } - } else if (bitstream.getFormat(context).getMIMEType().equals("application/x-tar")) { - data = extractFile(inputStream, ARCHIVE_TYPE_TAR); + Map archiveTypes = Map.of( + "application/zip", ARCHIVE_TYPE_ZIP, + "application/x-tar", ARCHIVE_TYPE_TAR + ); + + String mimeType = bitstream.getFormat(context).getMIMEType(); + if (archiveTypes.containsKey(mimeType)) { try { + data = extractFile(inputStream, archiveTypes.get(mimeType)); fileInfos = FileTreeViewGenerator.parse(data); } catch (Exception e) { log.error("Cannot extract file content because: {}", e.getMessage()); From 0e30a9cc926d8fbde3987fc68b1a1da526444438 Mon Sep 17 00:00:00 2001 From: milanmajchrak Date: Tue, 1 Apr 2025 15:36:56 +0200 Subject: [PATCH 2/3] Catch the Exception only in the top level of the script with a proper message --- .../content/PreviewContentServiceImpl.java | 22 +++++-------------- .../service/PreviewContentService.java | 6 ++--- .../scripts/filepreview/FilePreview.java | 6 ++--- .../MetadataBitstreamRestRepository.java | 3 +-- 4 files changed, 11 insertions(+), 26 deletions(-) diff --git a/dspace-api/src/main/java/org/dspace/content/PreviewContentServiceImpl.java b/dspace-api/src/main/java/org/dspace/content/PreviewContentServiceImpl.java index 3252a9574233..e6cd2ec12f76 100644 --- a/dspace-api/src/main/java/org/dspace/content/PreviewContentServiceImpl.java +++ b/dspace-api/src/main/java/org/dspace/content/PreviewContentServiceImpl.java @@ -152,7 +152,7 @@ public boolean canPreview(Context context, Bitstream bitstream) throws SQLExcept @Override public List getFilePreviewContent(Context context, Bitstream bitstream) - throws SQLException, AuthorizeException, IOException { + throws Exception { InputStream inputStream = null; List fileInfos = null; try { @@ -160,11 +160,7 @@ public List getFilePreviewContent(Context context, Bitstream bitstream } catch (MissingLicenseAgreementException e) { /* Do nothing */ } if (Objects.nonNull(inputStream)) { - try { - fileInfos = processInputStreamToFilePreview(context, bitstream, inputStream); - } catch (IllegalStateException e) { - log.error("Cannot process Input Stream to file preview because: " + e.getMessage()); - } + fileInfos = processInputStreamToFilePreview(context, bitstream, inputStream); } return fileInfos; } @@ -193,7 +189,7 @@ public FileInfo createFileInfo(PreviewContent pc) { @Override public List processInputStreamToFilePreview(Context context, Bitstream bitstream, InputStream inputStream) - throws SQLException, IOException { + throws Exception { List fileInfos = new ArrayList<>(); String bitstreamMimeType = bitstream.getFormat(context).getMIMEType(); if (bitstreamMimeType.equals("text/plain")) { @@ -216,12 +212,8 @@ public List processInputStreamToFilePreview(Context context, Bitstream String mimeType = bitstream.getFormat(context).getMIMEType(); if (archiveTypes.containsKey(mimeType)) { - try { - data = extractFile(inputStream, archiveTypes.get(mimeType)); - fileInfos = FileTreeViewGenerator.parse(data); - } catch (Exception e) { - log.error("Cannot extract file content because: {}", e.getMessage()); - } + data = extractFile(inputStream, archiveTypes.get(mimeType)); + fileInfos = FileTreeViewGenerator.parse(data); } } return fileInfos; @@ -420,7 +412,7 @@ private String buildXmlResponse(List filePaths) { * @param fileType the type of file to extract ("tar" or "zip") * @return an XML string representing the extracted file paths */ - private String extractFile(InputStream inputStream, String fileType) { + private String extractFile(InputStream inputStream, String fileType) throws Exception { List filePaths = new ArrayList<>(); Path tempFile = null; FileSystem zipFileSystem = null; @@ -439,8 +431,6 @@ private String extractFile(InputStream inputStream, String fileType) { zipFileSystem = FileSystems.newFileSystem(tempFile, (ClassLoader) null); processZipFile(filePaths, zipFileSystem); } - } catch (IOException e) { - log.error(String.format("An error occurred while extracting file of type %s.", fileType), e); } finally { closeFileSystem(zipFileSystem); deleteTempFile(tempFile); diff --git a/dspace-api/src/main/java/org/dspace/content/service/PreviewContentService.java b/dspace-api/src/main/java/org/dspace/content/service/PreviewContentService.java index bb5ffe87efd2..8a27f61844c7 100644 --- a/dspace-api/src/main/java/org/dspace/content/service/PreviewContentService.java +++ b/dspace-api/src/main/java/org/dspace/content/service/PreviewContentService.java @@ -7,7 +7,6 @@ */ package org.dspace.content.service; -import java.io.IOException; import java.io.InputStream; import java.sql.SQLException; import java.util.List; @@ -116,8 +115,7 @@ PreviewContent create(Context context, Bitstream bitstream, String name, String * @param bitstream ZIP file bitstream * @return List of FileInfo classes where is wrapped ZIP file content */ - List getFilePreviewContent(Context context, Bitstream bitstream) - throws SQLException, AuthorizeException, IOException; + List getFilePreviewContent(Context context, Bitstream bitstream) throws Exception; /** * Create preview content from file info for bitstream. @@ -153,5 +151,5 @@ List getFilePreviewContent(Context context, Bitstream bitstream) * @return List of FileInfo classes where is wrapped ZIP file content */ List processInputStreamToFilePreview(Context context, Bitstream bitstream, InputStream inputStream) - throws SQLException, IOException; + throws Exception; } diff --git a/dspace-api/src/main/java/org/dspace/scripts/filepreview/FilePreview.java b/dspace-api/src/main/java/org/dspace/scripts/filepreview/FilePreview.java index a2e4c1f1930b..b30d1a9aa5f4 100644 --- a/dspace-api/src/main/java/org/dspace/scripts/filepreview/FilePreview.java +++ b/dspace-api/src/main/java/org/dspace/scripts/filepreview/FilePreview.java @@ -99,8 +99,7 @@ public void internalRun() throws Exception { Item item = items.next(); try { generateItemFilePreviews(context, item.getID()); - } catch (SQLException | AuthorizeException | IOException | ParserConfigurationException | - ArchiveException | SAXException e) { + } catch (Exception e) { handler.logError("Error while generating preview for item with UUID: " + item.getID()); handler.logError(e.getMessage()); } @@ -115,8 +114,7 @@ public void internalRun() throws Exception { context.complete(); } - private void generateItemFilePreviews(Context context, UUID itemUUID) throws SQLException, AuthorizeException, - IOException, ParserConfigurationException, ArchiveException, SAXException { + private void generateItemFilePreviews(Context context, UUID itemUUID) throws Exception { Item item = itemService.find(context, itemUUID); if (Objects.isNull(item)) { handler.logError("Item with UUID: " + itemUUID + " not found."); diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/MetadataBitstreamRestRepository.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/MetadataBitstreamRestRepository.java index 187a467b9cda..0cde2a2af391 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/MetadataBitstreamRestRepository.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/MetadataBitstreamRestRepository.java @@ -68,8 +68,7 @@ public class MetadataBitstreamRestRepository extends DSpaceRestRepository findByHandle(@Parameter(value = "handle", required = true) String handle, @Parameter(value = "fileGrpType") String fileGrpType, Pageable pageable) - throws SQLException, ParserConfigurationException, IOException, SAXException, AuthorizeException, - ArchiveException { + throws Exception { if (StringUtils.isBlank(handle)) { throw new DSpaceBadRequestException("handle cannot be null!"); } From dda480dc27481f87c4ab95ea95608f587925141e Mon Sep 17 00:00:00 2001 From: milanmajchrak Date: Tue, 1 Apr 2025 15:40:43 +0200 Subject: [PATCH 3/3] Fixed checkstyle issues --- .../java/org/dspace/scripts/filepreview/FilePreview.java | 6 ------ .../rest/repository/MetadataBitstreamRestRepository.java | 6 ------ 2 files changed, 12 deletions(-) diff --git a/dspace-api/src/main/java/org/dspace/scripts/filepreview/FilePreview.java b/dspace-api/src/main/java/org/dspace/scripts/filepreview/FilePreview.java index b30d1a9aa5f4..46e4c2564fde 100644 --- a/dspace-api/src/main/java/org/dspace/scripts/filepreview/FilePreview.java +++ b/dspace-api/src/main/java/org/dspace/scripts/filepreview/FilePreview.java @@ -7,18 +7,13 @@ */ package org.dspace.scripts.filepreview; -import java.io.IOException; -import java.sql.SQLException; import java.util.Iterator; import java.util.List; import java.util.Objects; import java.util.UUID; -import javax.xml.parsers.ParserConfigurationException; import org.apache.commons.cli.ParseException; -import org.apache.commons.compress.archivers.ArchiveException; import org.apache.commons.lang3.StringUtils; -import org.dspace.authorize.AuthorizeException; import org.dspace.content.Bitstream; import org.dspace.content.Bundle; import org.dspace.content.Item; @@ -30,7 +25,6 @@ import org.dspace.scripts.DSpaceRunnable; import org.dspace.util.FileInfo; import org.dspace.utils.DSpace; -import org.xml.sax.SAXException; /** * This class is used to generate a preview for every file in DSpace that should have a preview. diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/MetadataBitstreamRestRepository.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/MetadataBitstreamRestRepository.java index 0cde2a2af391..7319ea90b38a 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/MetadataBitstreamRestRepository.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/MetadataBitstreamRestRepository.java @@ -7,16 +7,12 @@ */ package org.dspace.app.rest.repository; -import java.io.IOException; -import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; import javax.servlet.http.HttpServletRequest; -import javax.xml.parsers.ParserConfigurationException; -import org.apache.commons.compress.archivers.ArchiveException; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.Logger; import org.dspace.app.rest.Parameter; @@ -26,7 +22,6 @@ import org.dspace.app.rest.exception.UnprocessableEntityException; import org.dspace.app.rest.model.MetadataBitstreamWrapperRest; import org.dspace.app.rest.model.wrapper.MetadataBitstreamWrapper; -import org.dspace.authorize.AuthorizeException; import org.dspace.content.Bitstream; import org.dspace.content.Bundle; import org.dspace.content.DSpaceObject; @@ -43,7 +38,6 @@ import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Component; -import org.xml.sax.SAXException; /** * This controller returns content of the bitstream to the `Preview` box in the Item View.