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 2025/12/19 14:23:14 UTC

svn commit: r1930733 - in pdfbox/branches/3.0/xmpbox/src: main/java/org/apache/xmpbox/xml test/java/org/apache/xmpbox/xml

Author: tilman
Date: Fri Dec 19 14:23:14 2025
New Revision: 1930733

Log:
PDFBOX-6128: push / pop for resource type

Modified:
   pdfbox/branches/3.0/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java
   pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java

Modified: pdfbox/branches/3.0/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java
==============================================================================
--- pdfbox/branches/3.0/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java	Fri Dec 19 14:23:08 2025	(r1930732)
+++ pdfbox/branches/3.0/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java	Fri Dec 19 14:23:14 2025	(r1930733)
@@ -654,7 +654,15 @@ public class DomXmpParser
     {
         if (DomHelper.isParseTypeResource(liElement))
         {
-            return parseLiDescription(xmp, descriptor, liElement);
+            try
+            {
+                nsFinder.push(liElement);
+                return parseLiDescription(xmp, descriptor, liElement);
+            }
+            finally
+            {
+                nsFinder.pop();
+            }
         }
         // will find rdf:Description
         Element liChild = DomHelper.getUniqueElementChild(liElement);

Modified: pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
==============================================================================
--- pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java	Fri Dec 19 14:23:08 2025	(r1930732)
+++ pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java	Fri Dec 19 14:23:14 2025	(r1930733)
@@ -1146,4 +1146,32 @@ class DomXmpParserTest
                 () -> xmpParser1.parse(s.getBytes(StandardCharsets.UTF_8)));
         assertEquals("Expecting namespace 'http://www.w3.org/1999/02/22-rdf-syntax-ns#' and found 'https://www.w3.org/1999/02/22-rdf-syntax-ns#'", ex.getMessage());
     }
+
+    @Test
+    void testTypeInLiResourceElement() throws XmpParsingException
+    {
+        // <rdf:li xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" rdf:parseType="Resource"
+        String s = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n" +
+                    "<?xpacket begin=\"\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?><x:xmpmeta xmlns:x=\"adobe:ns:meta/\">\n" +
+                    "    <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n" +
+                    "        <rdf:Description xmlns:xmpMM=\"http://ns.adobe.com/xap/1.0/mm/\" rdf:about=\"\">\n" +
+                    "            <xmpMM:History>\n" +
+                    "                <rdf:Seq>\n" +
+                    "                    <rdf:li xmlns:stEvt=\"http://ns.adobe.com/xap/1.0/sType/ResourceEvent#\" rdf:parseType=\"Resource\">\n" +
+                    "                        <stEvt:action>created</stEvt:action>\n" +
+                    "                        <stEvt:parameters>original PDF file</stEvt:parameters>\n" +
+                    "                    </rdf:li>\n" +
+                    "                </rdf:Seq>\n" +
+                    "            </xmpMM:History>\n" +
+                    "        </rdf:Description>\n" +
+                    "    </rdf:RDF>\n" +
+                    "</x:xmpmeta><?xpacket end=\"w\"?>";
+        DomXmpParser xmpParser = new DomXmpParser();
+        XMPMetadata xmp2 = xmpParser.parse(s.getBytes(StandardCharsets.UTF_8));
+        XMPMediaManagementSchema xmpMediaManagementSchema = xmp2.getXMPMediaManagementSchema();
+        ArrayProperty historyProperty = xmpMediaManagementSchema.getHistoryProperty();
+        ResourceEventType firstHistoryEntry = (ResourceEventType) historyProperty.getAllProperties().iterator().next();
+        assertEquals("created", firstHistoryEntry.getAction());
+        assertEquals("original PDF file", firstHistoryEntry.getParameters());
+    }
 }