From 57f97b4071162061c98baba7dbdc0c8228b5f386 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Wed, 8 Dec 2021 20:18:14 +0100 Subject: [PATCH 1/3] Fix XMP import with multiple schemas Fix NPE in embedded bibtex importer --- CHANGELOG.md | 1 + .../fileformat/PdfEmbeddedBibFileImporter.java | 10 +++++++--- .../java/org/jabref/logic/xmp/XmpUtilReader.java | 13 +++++++++++-- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3bf5ca788f..b9b718e7265 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -74,6 +74,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve - We fixed an issue where selecting a citation style in the preferences would sometimes produce an exception [#7860](https://github.com/JabRef/jabref/issues/7860) - We fixed an issue where an exception would occur when clicking on a DOI link in the preview pane [#7706](https://github.com/JabRef/jabref/issues/7706) - We fixed an issue where XMP and embedded BibTeX export would not work [#8278](https://github.com/JabRef/jabref/issues/8278) +- We fixed an issue where the XMP and embedded BibTeX import of a file containing multiple schemas failed [#8278](https://github.com/JabRef/jabref/issues/8278) ### Removed diff --git a/src/main/java/org/jabref/logic/importer/fileformat/PdfEmbeddedBibFileImporter.java b/src/main/java/org/jabref/logic/importer/fileformat/PdfEmbeddedBibFileImporter.java index e91754afeb4..cef504ce528 100644 --- a/src/main/java/org/jabref/logic/importer/fileformat/PdfEmbeddedBibFileImporter.java +++ b/src/main/java/org/jabref/logic/importer/fileformat/PdfEmbeddedBibFileImporter.java @@ -89,10 +89,14 @@ private List getEmbeddedBibFileEntries(PDDocument document) throws IOE if (names != null) { allParsedEntries.addAll(extractAndParseFiles(names)); } else { + // can be nul List> kids = efTree.getKids(); - for (PDNameTreeNode node : kids) { - names = node.getNames(); - allParsedEntries.addAll(extractAndParseFiles(names)); + + if (kids != null) { + for (PDNameTreeNode node : kids) { + names = node.getNames(); + allParsedEntries.addAll(extractAndParseFiles(names)); + } } } } diff --git a/src/main/java/org/jabref/logic/xmp/XmpUtilReader.java b/src/main/java/org/jabref/logic/xmp/XmpUtilReader.java index 811428316a3..0844a5b6004 100644 --- a/src/main/java/org/jabref/logic/xmp/XmpUtilReader.java +++ b/src/main/java/org/jabref/logic/xmp/XmpUtilReader.java @@ -17,9 +17,13 @@ import org.apache.pdfbox.pdmodel.common.PDMetadata; import org.apache.xmpbox.XMPMetadata; import org.apache.xmpbox.schema.DublinCoreSchema; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class XmpUtilReader { + private static final Logger LOGGER = LoggerFactory.getLogger(XmpUtilReader.class); + private static final String START_TAG = " getXmpMetadata(PDDocument document) throws IOEx int startDescriptionSection = xmp.indexOf(START_TAG); int endDescriptionSection = xmp.lastIndexOf(END_TAG) + END_TAG.length(); - if (startDescriptionSection < 0 || startDescriptionSection > endDescriptionSection || endDescriptionSection == END_TAG.length() - 1) { + if ((startDescriptionSection < 0) || (startDescriptionSection > endDescriptionSection) || (endDescriptionSection == (END_TAG.length() - 1))) { return metaList; } @@ -134,7 +138,12 @@ private static List getXmpMetadata(PDDocument document) throws IOEx for (String s : descriptionsArray) { // END_TAG is appended, because of the split operation above String xmpMetaString = start + s + END_TAG + end; - metaList.add(XmpUtilShared.parseXmpMetadata(new ByteArrayInputStream(xmpMetaString.getBytes()))); + try { + metaList.add(XmpUtilShared.parseXmpMetadata(new ByteArrayInputStream(xmpMetaString.getBytes()))); + } + catch (IOException ex) { + LOGGER.error("Problem parsing XMP schema. Continuing with other schemas.", ex); + } } return metaList; } From 632ece7499288f9088fb4080d347dc45f011280d Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Wed, 8 Dec 2021 20:25:20 +0100 Subject: [PATCH 2/3] fix checkstyle --- src/main/java/org/jabref/logic/xmp/XmpUtilReader.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/org/jabref/logic/xmp/XmpUtilReader.java b/src/main/java/org/jabref/logic/xmp/XmpUtilReader.java index 0844a5b6004..cacf837155e 100644 --- a/src/main/java/org/jabref/logic/xmp/XmpUtilReader.java +++ b/src/main/java/org/jabref/logic/xmp/XmpUtilReader.java @@ -140,8 +140,7 @@ private static List getXmpMetadata(PDDocument document) throws IOEx String xmpMetaString = start + s + END_TAG + end; try { metaList.add(XmpUtilShared.parseXmpMetadata(new ByteArrayInputStream(xmpMetaString.getBytes()))); - } - catch (IOException ex) { + } catch (IOException ex) { LOGGER.error("Problem parsing XMP schema. Continuing with other schemas.", ex); } } From 4c2a10305cc811cf0832d82b85b5043efe6ce9db Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Wed, 8 Dec 2021 21:41:24 +0100 Subject: [PATCH 3/3] Remove obsolete comment and empty line --- .../logic/importer/fileformat/PdfEmbeddedBibFileImporter.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/org/jabref/logic/importer/fileformat/PdfEmbeddedBibFileImporter.java b/src/main/java/org/jabref/logic/importer/fileformat/PdfEmbeddedBibFileImporter.java index cef504ce528..f6e6b0ba4f4 100644 --- a/src/main/java/org/jabref/logic/importer/fileformat/PdfEmbeddedBibFileImporter.java +++ b/src/main/java/org/jabref/logic/importer/fileformat/PdfEmbeddedBibFileImporter.java @@ -89,9 +89,7 @@ private List getEmbeddedBibFileEntries(PDDocument document) throws IOE if (names != null) { allParsedEntries.addAll(extractAndParseFiles(names)); } else { - // can be nul List> kids = efTree.getKids(); - if (kids != null) { for (PDNameTreeNode node : kids) { names = node.getNames();