Uploaded image for project: 'PDFBox'
  1. PDFBox
  2. PDFBOX-5835

DomXmpParser - IllegalArgumentException: prefix cannot be "null" when creating a QName

VotersWatch issueWatchersLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.0.31, 3.0.2 PDFBox
    • 2.0.32, 3.0.3 PDFBox, 4.0.0
    • XmpBox
    • 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());
          }
      

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            tilman Tilman Hausherr
            O.Schmidtmer Oliver Schmidtmer
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment