You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2023/05/13 08:33:22 UTC

svn commit: r1909791 - /pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java

Author: tilman
Date: Sat May 13 08:33:22 2023
New Revision: 1909791

URL: http://svn.apache.org/viewvc?rev=1909791&view=rev
Log:
PDFBOX-5591: parsing of XMP metadata without optional xmpmeta element, as suggested by Miroslav Holubec; Closes #163

Modified:
    pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java

Modified: pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java?rev=1909791&r1=1909790&r2=1909791&view=diff
==============================================================================
--- pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java (original)
+++ pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java Sat May 13 08:33:22 2023
@@ -772,26 +772,35 @@ public class DomXmpParser
 
     private Element findDescriptionsParent(Element root) throws XmpParsingException
     {
-        // always <x:xmpmeta xmlns:x="adobe:ns:meta/">
-        expectNaming(root, "adobe:ns:meta/", "x", "xmpmeta");
-        // should only have one child
-        NodeList nl = root.getChildNodes();
-        if (nl.getLength() == 0)
+        Element rdfRdf;
+        // check if already rdf element, as xmpmeta wrapper can be optional
+        if (!XmpConstants.RDF_NAMESPACE.equals(root.getNamespaceURI()))
         {
-            // empty description
-            throw new XmpParsingException(ErrorType.Format, "No rdf description found in xmp");
+            // always <x:xmpmeta xmlns:x="adobe:ns:meta/">
+            expectNaming(root, "adobe:ns:meta/", "x", "xmpmeta");
+            // should only have one child
+            NodeList nl = root.getChildNodes();
+            if (nl.getLength() == 0)
+            {
+                // empty description
+                throw new XmpParsingException(ErrorType.Format, "No rdf description found in xmp");
+            }
+            else if (nl.getLength() > 1)
+            {
+                // only expect one element
+                throw new XmpParsingException(ErrorType.Format, "More than one element found in x:xmpmeta");
+            }
+            else if (!(root.getFirstChild() instanceof Element))
+            {
+                // should be an element
+                throw new XmpParsingException(ErrorType.Format, "x:xmpmeta does not contains rdf:RDF element");
+            } // else let's parse
+            rdfRdf = (Element) root.getFirstChild();
         }
-        else if (nl.getLength() > 1)
+        else
         {
-            // only expect one element
-            throw new XmpParsingException(ErrorType.Format, "More than one element found in x:xmpmeta");
+            rdfRdf = root;
         }
-        else if (!(root.getFirstChild() instanceof Element))
-        {
-            // should be an element
-            throw new XmpParsingException(ErrorType.Format, "x:xmpmeta does not contains rdf:RDF element");
-        } // else let's parse
-        Element rdfRdf = (Element) root.getFirstChild();
         // always <rdf:RDF
         // xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
         expectNaming(rdfRdf, XmpConstants.RDF_NAMESPACE, XmpConstants.DEFAULT_RDF_PREFIX,