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,