Author: tilman
Date: Sun Dec  7 11:30:19 2025
New Revision: 1930324

Log:
PDFBOX-3882: add test + test file

Added:
   
pdfbox/branches/3.0/xmpbox/src/test/resources/org/apache/xmpbox/xml/PDFBOX-3882-dematbox.xml
   (contents, props changed)
Modified:
   
pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java

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
        Sun Dec  7 11:30:14 2025        (r1930323)
+++ 
pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
        Sun Dec  7 11:30:19 2025        (r1930324)
@@ -24,12 +24,17 @@ package org.apache.xmpbox.xml;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
+import java.util.List;
 
 import org.apache.xmpbox.XMPMetadata;
 import org.apache.xmpbox.schema.XMPMediaManagementSchema;
+import org.apache.xmpbox.schema.XMPSchema;
 import org.apache.xmpbox.schema.XMPageTextSchema;
+import org.apache.xmpbox.type.AbstractField;
 import org.apache.xmpbox.type.ArrayProperty;
+import org.apache.xmpbox.type.DefinedStructuredType;
 import org.apache.xmpbox.type.DimensionsType;
+import org.apache.xmpbox.type.PDFASchemaType;
 import org.apache.xmpbox.type.ResourceEventType;
 import org.apache.xmpbox.type.ResourceRefType;
 
@@ -269,4 +274,35 @@ class DomXmpParserTest
         Assertions.assertEquals("DimensionsType{4.0 x 3.0 inch}", 
dim.toString());
         Assertions.assertEquals("[NPages=IntegerType:7]", 
pageTextSchema.getProperty(XMPageTextSchema.N_PAGES).toString());
     }
+
+
+    /**
+     * PDFBOX-3882: Test attributes being used as properties to define an 
extension schema. Also
+     * verify the content of the actual extension schema.
+     *
+     * @throws IOException
+     * @throws XmpParsingException 
+     */
+    @Test
+    void testPDFBox3882() throws IOException, XmpParsingException
+    {
+        try (InputStream is = 
DomXmpParser.class.getResourceAsStream("/org/apache/xmpbox/xml/PDFBOX-3882-dematbox.xml"))
+        {
+            DomXmpParser dxp = new DomXmpParser();
+            dxp.setStrictParsing(false);
+            XMPMetadata xmp = dxp.parse(is);
+            List<AbstractField> allProperties = 
xmp.getPDFExtensionSchema().getSchemasProperty().getAllProperties();
+            Assertions.assertEquals(1, allProperties.size());
+            PDFASchemaType pdfExtensionSchema = (PDFASchemaType) 
allProperties.get(0);
+            
Assertions.assertEquals("http://www.sagemcom.com/documents/xmlns/dematbox";, 
pdfExtensionSchema.getNamespaceURI());
+            Assertions.assertEquals("dematbox", 
pdfExtensionSchema.getPrefixValue());
+            XMPSchema extensionSchema = 
xmp.getSchema(pdfExtensionSchema.getNamespaceURI());
+            Assertions.assertEquals(pdfExtensionSchema.getNamespaceURI(), 
extensionSchema.getNamespace());
+            Assertions.assertEquals(pdfExtensionSchema.getPrefixValue(), 
extensionSchema.getPrefix());
+            ArrayProperty pageInfoProp = (ArrayProperty) 
extensionSchema.getProperty("PageInfo");
+            DefinedStructuredType dst = (DefinedStructuredType) 
pageInfoProp.getAllProperties().get(0);
+            Assertions.assertEquals("[number=IntegerType:1]", 
dst.getProperty("number").toString());
+            Assertions.assertEquals("[origNumber=IntegerType:1]", 
dst.getProperty("origNumber").toString());            
+        }
+    }
 }

Added: 
pdfbox/branches/3.0/xmpbox/src/test/resources/org/apache/xmpbox/xml/PDFBOX-3882-dematbox.xml
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ 
pdfbox/branches/3.0/xmpbox/src/test/resources/org/apache/xmpbox/xml/PDFBOX-3882-dematbox.xml
        Sun Dec  7 11:30:19 2025        (r1930324)
@@ -0,0 +1,7 @@
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta 
xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'><rdf:RDF 
xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' 
xmlns:iX='http://ns.adobe.com/iX/1.0/'><rdf:Description 
xmlns:dc='http://purl.org/dc/elements/1.1/' 
rdf:about=''><dc:title><rdf:Alt><rdf:li 
xml:lang="x-default">Dematbox_DocId=365899</rdf:li></rdf:Alt></dc:title><dc:creator><rdf:Seq><rdf:li></rdf:li></rdf:Seq></dc:creator></rdf:Description><rdf:Description
 xmlns:xmp='http://ns.adobe.com/xap/1.0/' 
rdf:about=''><xmp:CreatorTool>CrystalImage</xmp:CreatorTool><xmp:CreateDate>2017-07-24T10:18:18+00:00</xmp:CreateDate></rdf:Description><rdf:Description
 xmlns:pdf='http://ns.adobe.com/pdf/1.3/' 
rdf:about=''><pdf:Producer>CrystalImage v 2.24.01 (20170717) (Leht3 v. 
9.1-ansic)(r=300,q=50,docfmt=pdf,crp,ibpd,frcdstr)</pdf:Producer></rdf:Description><rdf:Description
 rdf:about='' xmlns:pdfaid='http://www.aiim.org/pdfa/ns/id/' pdfaid:part='1' 
pdfaid:con
 formance='B'/><rdf:Description rdf:about="" 
xmlns:pdfaExtension="http://www.aiim.org/pdfa/ns/extension/"; 
xmlns:pdfaSchema="http://www.aiim.org/pdfa/ns/schema#"; 
xmlns:pdfaProperty="http://www.aiim.org/pdfa/ns/property#"; 
xmlns:pdfaType="http://www.aiim.org/pdfa/ns/type#"; 
xmlns:pdfaField="http://www.aiim.org/pdfa/ns/field#";> <pdfaExtension:schemas> 
<rdf:Bag> <rdf:li rdf:parseType="Resource"> 
<pdfaSchema:namespaceURI>http://www.sagemcom.com/documents/xmlns/dematbox</pdfaSchema:namespaceURI>
 <pdfaSchema:prefix>dematbox</pdfaSchema:prefix> <pdfaSchema:property> 
<rdf:Seq> <rdf:li rdf:parseType="Resource" pdfaProperty:name="PageInfo" 
pdfaProperty:valueType="seq PageInfo" pdfaProperty:category="internal" 
pdfaProperty:description="page information"/> </rdf:Seq> </pdfaSchema:property> 
<pdfaSchema:valueType> <rdf:Seq> <rdf:li rdf:parseType="Resource" 
pdfaType:type="PageInfo" 
pdfaType:namespaceURI="http://www.sagemcom.com/documents/xmlns/dematbox/PageInfo";
 pdfaType:prefix="PageInfo" pdfaType:des
 cription="page information"> <pdfaType:field> <rdf:Seq> <rdf:li 
rdf:parseType="Resource" pdfaField:name="number" pdfaField:valueType="Integer" 
pdfaField:description="Page number."/> <rdf:li rdf:parseType="Resource" 
pdfaField:name="origNumber" pdfaField:valueType="Integer" 
pdfaField:description="Page number in the original document."/> <rdf:li 
rdf:parseType="Resource" pdfaField:name="isCgv" pdfaField:valueType="Boolean" 
pdfaField:description="Was the page detected as CGV?"/> <rdf:li 
rdf:parseType="Resource" pdfaField:name="barcodeValue" 
pdfaField:valueType="Text" pdfaField:description="Was a barcode found in the 
page?"/> </rdf:Seq> </pdfaType:field> </rdf:li> </rdf:Seq> 
</pdfaSchema:valueType> </rdf:li> </rdf:Bag> </pdfaExtension:schemas> 
</rdf:Description><rdf:Description 
xmlns:dematbox="http://www.sagemcom.com/documents/xmlns/dematbox"; rdf:about="">
+  <dematbox:PageInfo 
xmlns:PageInfo="http://www.sagemcom.com/documents/xmlns/dematbox/PageInfo";>
+    <rdf:Seq>
+      <rdf:li rdf:parseType="Resource" PageInfo:number="1" 
PageInfo:origNumber="1"/>
+    </rdf:Seq>
+  </dematbox:PageInfo>
+</rdf:Description></rdf:RDF></x:xmpmeta><?xpacket end='w'?>
\ No newline at end of file

Reply via email to