From: Dominik Stadler Date: Sun, 2 Jun 2024 09:39:57 +0000 (+0000) Subject: Avoid NPE and improve error message when saving a package-part fails X-Git-Tag: REL_5_3_0~17 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=329a65973999f106c3273b9328b76c49bb9a26e2;p=poi.git Avoid NPE and improve error message when saving a package-part fails git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1918117 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/internal/marshallers/PackagePropertiesMarshaller.java b/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/internal/marshallers/PackagePropertiesMarshaller.java index 459cbef831..b682cfc141 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/internal/marshallers/PackagePropertiesMarshaller.java +++ b/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/internal/marshallers/PackagePropertiesMarshaller.java @@ -89,7 +89,8 @@ public class PackagePropertiesMarshaller implements PartMarshaller { throws OpenXML4JException { if (!(part instanceof PackagePropertiesPart)) throw new IllegalArgumentException( - "'part' must be a PackagePropertiesPart instance."); + "'part' must be a PackagePropertiesPart instance, but had: " + part.getClass() + + ", check logs while reading."); propsPart = (PackagePropertiesPart) part; // Configure the document diff --git a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFGraphicFrame.java b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFGraphicFrame.java index 18c69b616b..4f7aa91704 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFGraphicFrame.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFGraphicFrame.java @@ -63,13 +63,15 @@ public final class XSSFGraphicFrame extends XSSFShape { for (int i = 0; i < nodes.getLength(); i++) { final Node node = nodes.item(i); // if the frame references a chart, associate the chart with this instance - Node namedItem = node.getAttributes().getNamedItem("r:id"); - if (node.getNodeName().equals("c:chart") && namedItem != null) { - // this better succeed or the document is invalid - POIXMLDocumentPart relation = drawing.getRelationById(namedItem.getNodeValue()); - // Do XWPF charts need similar treatment? - if (relation instanceof XSSFChart) { - ((XSSFChart) relation).setGraphicFrame(this); + if (node.getAttributes() != null) { + Node namedItem = node.getAttributes().getNamedItem("r:id"); + if (node.getNodeName().equals("c:chart") && namedItem != null) { + // this better succeed or the document is invalid + POIXMLDocumentPart relation = drawing.getRelationById(namedItem.getNodeValue()); + // Do XWPF charts need similar treatment? + if (relation instanceof XSSFChart) { + ((XSSFChart) relation).setGraphicFrame(this); + } } } } diff --git a/test-data/spreadsheet/123233_charts.xlsx b/test-data/spreadsheet/123233_charts.xlsx new file mode 100644 index 0000000000..be3c1a2f91 Binary files /dev/null and b/test-data/spreadsheet/123233_charts.xlsx differ