Author: tilman
Date: Sun Dec 7 16:25:05 2025
New Revision: 1930335
Log:
PDFBOX-3882: add test
Modified:
pdfbox/branches/2.0/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
Modified:
pdfbox/branches/2.0/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
==============================================================================
---
pdfbox/branches/2.0/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
Sun Dec 7 15:30:06 2025 (r1930334)
+++
pdfbox/branches/2.0/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
Sun Dec 7 16:25:05 2025 (r1930335)
@@ -23,9 +23,12 @@ package org.apache.xmpbox.xml;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
+import java.util.Calendar;
import java.util.List;
import org.apache.xmpbox.XMPMetadata;
+import org.apache.xmpbox.schema.PhotoshopSchema;
import org.apache.xmpbox.schema.XMPMediaManagementSchema;
import org.apache.xmpbox.schema.XMPSchema;
import org.apache.xmpbox.schema.XMPageTextSchema;
@@ -36,6 +39,7 @@ import org.apache.xmpbox.type.Dimensions
import org.apache.xmpbox.type.PDFASchemaType;
import org.apache.xmpbox.type.ResourceEventType;
import org.apache.xmpbox.type.ResourceRefType;
+import org.apache.xmpbox.type.TextType;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import org.junit.Test;
@@ -295,4 +299,104 @@ public class DomXmpParserTest
assertEquals("[origNumber=IntegerType:1]",
dst.getProperty("origNumber").toString());
is.close();
}
+
+ /**
+ * PDFBOX-3882: Test ResourceEventType properties as attributes instead of
properties (call of
+ * tryParseAttributesAsProperties() the the end of parseLiElement())
+ *
+ * @throws XmpParsingException
+ */
+ @Test
+ public void testPDFBox3882_2() throws XmpParsingException
+ {
+ // data modified from XMP data in the JPEG file in Apache Tika
JpegParserTest.testJPEGXMPMM()
+ String s = "<?xpacket begin=\"\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?>\n"
+
+ "<x:xmpmeta xmlns:x=\"adobe:ns:meta/\"\n" +
+ " x:xmptk=\"Adobe XMP Core 5.0-c060 61.134777,
2010/02/12-17:32:00 \">\n" +
+ " <rdf:RDF
xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n" +
+ " <rdf:Description rdf:about=\"\"\n" +
+ "
xmlns:xmp=\"http://ns.adobe.com/xap/1.0/\"\n" +
+ "
xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n" +
+ "
xmlns:xmpMM=\"http://ns.adobe.com/xap/1.0/mm/\"\n" +
+ "
xmlns:stEvt=\"http://ns.adobe.com/xap/1.0/sType/ResourceEvent#\"\n" +
+ "
xmlns:stRef=\"http://ns.adobe.com/xap/1.0/sType/ResourceRef#\"\n" +
+ "
xmlns:photoshop=\"http://ns.adobe.com/photoshop/1.0/\"\n" +
+ " xmp:CreatorTool=\"Adobe
Photoshop CS5 Macintosh\"\n" +
+ "
xmp:CreateDate=\"2012-04-30T12:52:07-04:00\"\n" +
+ "
xmp:MetadataDate=\"2012-05-03T13:36:11-04:00\"\n" +
+ "
xmp:ModifyDate=\"2012-05-03T13:36:11-04:00\"\n" +
+ " dc:format=\"image/jpeg\"\n" +
+ "
xmpMM:InstanceID=\"xmp.iid:49E997338D4911E1AB62EBF9B374B234\"\n" +
+ "
xmpMM:DocumentID=\"xmp.did:49E997348D4911E1AB62EBF9B374B234\"\n" +
+ "
xmpMM:OriginalDocumentID=\"xmp.did:01801174072068118A6D9A879C818256\"\n" +
+ "
photoshop:History=\"2012-05-03T09:34:50-04:00	File i1222b.jpg
opened
\">\n" +
+ " <xmpMM:History>\n" +
+ " <rdf:Seq>\n" +
+ " <rdf:li
stEvt:action=\"created\"\n" +
+ "
stEvt:instanceID=\"xmp.iid:01801174072068118A6D9A879C818256\"\n" +
+ "
stEvt:when=\"2012-04-30T12:52:07-04:00\"\n" +
+ "
stEvt:softwareAgent=\"Adobe Photoshop CS5 Macintosh\"/>\n" +
+ " <rdf:li
stEvt:action=\"saved\"\n" +
+ "
stEvt:instanceID=\"xmp.iid:02801174072068118A6D9A879C818256\"\n" +
+ "
stEvt:when=\"2012-04-30T12:54:04-04:00\"\n" +
+ "
stEvt:softwareAgent=\"Adobe Photoshop CS5 Macintosh\"\n" +
+ "
stEvt:changed=\"/\"/>\n" +
+ " <rdf:li
stEvt:action=\"saved\"\n" +
+ "
stEvt:instanceID=\"xmp.iid:03801174072068118A6D9A879C818256\"\n" +
+ "
stEvt:when=\"2012-04-30T12:54:48-04:00\"\n" +
+ "
stEvt:softwareAgent=\"Adobe Photoshop CS5 Macintosh\"\n" +
+ "
stEvt:changed=\"/\"/>\n" +
+ " </rdf:Seq>\n" +
+ " </xmpMM:History>\n" +
+ " <xmpMM:DerivedFrom
stRef:instanceID=\"xmp.iid:21F0677BA22168118A6D9A879C818256\"\n" +
+ "
stRef:documentID=\"xmp.did:01801174072068118A6D9A879C818256\"\n" +
+ "
stRef:originalDocumentID=\"xmp.did:01801174072068118A6D9A879C818256\"/>\n" +
+ " <photoshop:DocumentAncestors>\n" +
+ " <rdf:Bag>\n" +
+ "
<rdf:li>adobe:docid:photoshop:11d3ec5a-c131-11d8-9274-ec65c7d7e0c6</rdf:li>\n" +
+ "
<rdf:li>adobe:docid:photoshop:aadc7027-309c-11d8-9596-9cf45d2f630b</rdf:li>\n" +
+ "
<rdf:li>adobe:docid:photoshop:c7961c59-6e0f-11d8-87b7-d67539df12d8</rdf:li>\n" +
+ " </rdf:Bag>\n" +
+ " </photoshop:DocumentAncestors>\n" +
+ " </rdf:Description>\n" +
+ " </rdf:RDF>\n" +
+ "</x:xmpmeta>\n" +
+ "<?xpacket end=\"w\"?>";
+ DomXmpParser xmpParser = new DomXmpParser();
+ XMPMetadata xmp = xmpParser.parse(s.getBytes(StandardCharsets.UTF_8));
+ XMPMediaManagementSchema xmpMediaManagementSchema =
xmp.getXMPMediaManagementSchema();
+ ArrayProperty historyProperty =
xmpMediaManagementSchema.getHistoryProperty();
+ List<AbstractField> historyProperties =
historyProperty.getAllProperties();
+ assertEquals(3, historyProperties.size());
+ ResourceEventType ret0 = (ResourceEventType) historyProperties.get(0);
+ ResourceEventType ret1 = (ResourceEventType) historyProperties.get(1);
+ ResourceEventType ret2 = (ResourceEventType) historyProperties.get(2);
+ assertEquals("created", ret0.getAction());
+ assertEquals("xmp.iid:01801174072068118A6D9A879C818256",
ret0.getInstanceID());
+ assertEquals(2012, ret0.getWhen().get(Calendar.YEAR));
+ assertEquals(52, ret0.getWhen().get(Calendar.MINUTE));
+ assertEquals("Adobe Photoshop CS5 Macintosh", ret0.getSoftwareAgent());
+ assertEquals("xmp.iid:02801174072068118A6D9A879C818256",
ret1.getInstanceID());
+ assertEquals("xmp.iid:03801174072068118A6D9A879C818256",
ret2.getInstanceID());
+ assertEquals(2012, ret1.getWhen().get(Calendar.YEAR));
+ assertEquals(54, ret1.getWhen().get(Calendar.MINUTE));
+ assertEquals(4, ret1.getWhen().get(Calendar.SECOND));
+ assertEquals(2012, ret2.getWhen().get(Calendar.YEAR));
+ assertEquals(2012, ret2.getWhen().get(Calendar.YEAR));
+ assertEquals(54, ret2.getWhen().get(Calendar.MINUTE));
+ assertEquals(48, ret2.getWhen().get(Calendar.SECOND));
+ assertEquals("xmp.iid:49E997338D4911E1AB62EBF9B374B234",
xmpMediaManagementSchema.getInstanceID());
+ assertEquals("xmp.did:49E997348D4911E1AB62EBF9B374B234",
xmpMediaManagementSchema.getDocumentID());
+ assertEquals("xmp.did:01801174072068118A6D9A879C818256",
xmpMediaManagementSchema.getOriginalDocumentID());
+ System.out.println("MediaManagementSchema all: " +
xmpMediaManagementSchema.getAllProperties());
+ PhotoshopSchema photoshopSchema = xmp.getPhotoshopSchema();
+ assertEquals("2012-05-03T09:34:50-04:00\tFile i1222b.jpg opened\n",
photoshopSchema.getHistory());
+ ArrayProperty ancestorsProperty = (ArrayProperty)
photoshopSchema.getProperty("DocumentAncestors");
+ List<AbstractField> ancestors = ancestorsProperty.getAllProperties();
+ assertEquals(3, ancestors.size());
+
assertEquals("adobe:docid:photoshop:11d3ec5a-c131-11d8-9274-ec65c7d7e0c6",
((TextType) ancestors.get(0)).getStringValue());
+
assertEquals("adobe:docid:photoshop:aadc7027-309c-11d8-9596-9cf45d2f630b",
((TextType) ancestors.get(1)).getStringValue());
+
assertEquals("adobe:docid:photoshop:c7961c59-6e0f-11d8-87b7-d67539df12d8",
((TextType) ancestors.get(2)).getStringValue());
+ ResourceRefType derivedFromProperty =
xmpMediaManagementSchema.getDerivedFromProperty(); //TODO doesn't work yet?!
+ }
}