Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.0.31, 3.0.2 PDFBox
-
None
Description
I've got a PDF from, where parsing the metadata fails with an IllegalArgumentException
java.lang.IllegalArgumentException: prefix cannot be "null" when creating a QName
at java.xml/javax.xml.namespace.QName.<init>(QName.java:192)
at org.apache.xmpbox.xml.DomHelper.getQName(DomHelper.java:99)
at org.apache.xmpbox.xml.DomXmpParser.parseChildrenAsProperties(DomXmpParser.java:306)
at org.apache.xmpbox.xml.DomXmpParser.parseDescriptionRoot(DomXmpParser.java:250)
at org.apache.xmpbox.xml.DomXmpParser.parse(DomXmpParser.java:201)
at org.apache.xmpbox.xml.DomXmpParser.parse(DomXmpParser.java:112)
This can be reproduced with a simple test, using the extracted metadata:
@Test void testDomXmpParser() throws XmpParsingException { // taken from file test-landscape2.pdf String xmpmeta = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n" + "<?xpacket begin=\"\uFEFF\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?><x:xmpmeta xmlns:x=\"adobe:ns:meta/\" x:xmptk=\"FIS/xee\">\n" + " <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n" + " <rdf:Description xmlns:pdfaid=\"http://www.aiim.org/pdfa/ns/id/\">\n" + " <pdfaid:part>3</pdfaid:part>\n" + " <pdfaid:conformance>A</pdfaid:conformance>\n" + " </rdf:Description>\n" + " <rdf:Description xmlns:pdfaExtension=\"http://www.aiim.org/pdfa/ns/extension/\" xmlns:pdfaField=\"http://www.aiim.org/pdfa/ns/field#\" xmlns:pdfaProperty=\"http://www.aiim.org/pdfa/ns/property#\" xmlns:pdfaSchema=\"http://www.aiim.org/pdfa/ns/schema#\" xmlns:pdfaType=\"http://www.aiim.org/pdfa/ns/type#\" rdf:about=\"\"/>\n" + " <rdf:Description>\n" + " <schemas xmlns=\"http://www.aiim.org/pdfa/ns/extension/\">\n" + " <rdf:Bag>\n" + " <rdf:li rdf:parseType=\"Resource\">\n" + " <schema xmlns=\"http://www.aiim.org/pdfa/ns/schema#\">ZUGFeRD PDFA Extension Schema</schema>\n" + " <namespaceURI xmlns=\"http://www.aiim.org/pdfa/ns/schema#\">urn:ferd:pdfa:CrossIndustryDocument:invoice:1p0#</namespaceURI>\n" + " <prefix xmlns=\"http://www.aiim.org/pdfa/ns/schema#\">zf</prefix>\n" + " <property xmlns=\"http://www.aiim.org/pdfa/ns/schema#\">\n" + " <rdf:Seq>\n" + " <rdf:li rdf:parseType=\"Resource\">\n" + " <name xmlns=\"http://www.aiim.org/pdfa/ns/property#\">DocumentFileName</name>\n" + " <valueType xmlns=\"http://www.aiim.org/pdfa/ns/property#\">Text</valueType>\n" + " <category xmlns=\"http://www.aiim.org/pdfa/ns/property#\">external</category>\n" + " <description xmlns=\"http://www.aiim.org/pdfa/ns/property#\">name of the embedded XML invoice file</description>\n" + " </rdf:li>\n" + " <rdf:li rdf:parseType=\"Resource\">\n" + " <name xmlns=\"http://www.aiim.org/pdfa/ns/property#\">DocumentType</name>\n" + " <valueType xmlns=\"http://www.aiim.org/pdfa/ns/property#\">Text</valueType>\n" + " <category xmlns=\"http://www.aiim.org/pdfa/ns/property#\">external</category>\n" + " <description xmlns=\"http://www.aiim.org/pdfa/ns/property#\">INVOICE</description>\n" + " </rdf:li>\n" + " <rdf:li rdf:parseType=\"Resource\">\n" + " <name xmlns=\"http://www.aiim.org/pdfa/ns/property#\">Version</name>\n" + " <valueType xmlns=\"http://www.aiim.org/pdfa/ns/property#\">Text</valueType>\n" + " <category xmlns=\"http://www.aiim.org/pdfa/ns/property#\">external</category>\n" + " <description xmlns=\"http://www.aiim.org/pdfa/ns/property#\">The actual version of the ZUGFeRD data</description>\n" + " </rdf:li>\n" + " <rdf:li rdf:parseType=\"Resource\">\n" + " <name xmlns=\"http://www.aiim.org/pdfa/ns/property#\">ConformanceLevel</name>\n" + " <valueType xmlns=\"http://www.aiim.org/pdfa/ns/property#\">Text</valueType>\n" + " <category xmlns=\"http://www.aiim.org/pdfa/ns/property#\">external</category>\n" + " <description xmlns=\"http://www.aiim.org/pdfa/ns/property#\">The conformance level of the ZUGFeRD data</description>\n" + " </rdf:li>\n" + " </rdf:Seq>\n" + " </property>\n" + " </rdf:li>\n" + " </rdf:Bag>\n" + " </schemas>\n" + " </rdf:Description>\n" + " <rdf:Description xmlns:zf=\"urn:ferd:pdfa:CrossIndustryDocument:invoice:1p0#\" rdf:about=\"\" zf:ConformanceLevel=\"EXTENDED\" zf:DocumentFileName=\"ZUGFeRD-invoice.xml\" zf:DocumentType=\"INVOICE\" zf:Version=\"1.0\"/>\n" + " </rdf:RDF>\n" + "</x:xmpmeta><?xpacket end=\"w\"?>\n"; DomXmpParser xmpParser = new DomXmpParser(); xmpParser.setStrictParsing(false); XMPMetadata xmp = xmpParser.parse(xmpmeta.getBytes()); }