Author: tilman
Date: Fri Dec 19 12:10:41 2025
New Revision: 1930726
Log:
PDFBOX-5977: get each schema only once
Modified:
pdfbox/branches/1.8/jempbox/src/main/java/org/apache/jempbox/xmp/XMPMetadata.java
pdfbox/branches/1.8/jempbox/src/test/java/org/apache/jempbox/xmp/XMPMetadataTest.java
Modified:
pdfbox/branches/1.8/jempbox/src/main/java/org/apache/jempbox/xmp/XMPMetadata.java
==============================================================================
---
pdfbox/branches/1.8/jempbox/src/main/java/org/apache/jempbox/xmp/XMPMetadata.java
Fri Dec 19 11:29:57 2025 (r1930725)
+++
pdfbox/branches/1.8/jempbox/src/main/java/org/apache/jempbox/xmp/XMPMetadata.java
Fri Dec 19 12:10:41 2025 (r1930726)
@@ -618,7 +618,7 @@ public class XMPMetadata
if (name.startsWith("xmlns:") && nsMappings.containsKey(value))
{
String prefix = name.substring(6);
- retval.add(createXMPSchema(value, schema, prefix));
+ addIfXMPSchemaNotExists(retval, createXMPSchema(value,
schema, prefix));
found = true;
}
// PDFBOX-5977
@@ -627,7 +627,7 @@ public class XMPMetadata
name.contains(":"))
{
String prefix = name.substring(0, name.indexOf(':'));
- retval.add(createXMPSchema(attribute.getNamespaceURI(),
schema, prefix));
+ addIfXMPSchemaNotExists(retval,
createXMPSchema(attribute.getNamespaceURI(), schema, prefix));
found = true;
}
}
@@ -639,6 +639,24 @@ public class XMPMetadata
return retval;
}
+ // Make sure that each schema is added only once, although multiple
identical schemas
+ // won't hurt, because the actual values are retrieved by using DOM
+ private void addIfXMPSchemaNotExists(List<XMPSchema> schemaList, XMPSchema
schema)
+ {
+ boolean found = false;
+ for (XMPSchema sch : schemaList)
+ {
+ if (schema.getClass().isInstance(sch))
+ {
+ found = true;
+ }
+ }
+ if (!found)
+ {
+ schemaList.add(schema);
+ }
+ }
+
private XMPSchema createXMPSchema(String value, Element schemaElement,
String prefix) throws IOException
{
Class<?> schemaClass = nsMappings.get(value);
Modified:
pdfbox/branches/1.8/jempbox/src/test/java/org/apache/jempbox/xmp/XMPMetadataTest.java
==============================================================================
---
pdfbox/branches/1.8/jempbox/src/test/java/org/apache/jempbox/xmp/XMPMetadataTest.java
Fri Dec 19 11:29:57 2025 (r1930725)
+++
pdfbox/branches/1.8/jempbox/src/test/java/org/apache/jempbox/xmp/XMPMetadataTest.java
Fri Dec 19 12:10:41 2025 (r1930726)
@@ -151,8 +151,11 @@ public class XMPMetadataTest extends Tes
"</rdf:RDF><?xpacket end=\"r\"?>";
XMPMetadata xmp = XMPMetadata.load(new
ByteArrayInputStream(s.getBytes()));
xmp.addXMLNSMapping(XMPSchemaPDFAId.NAMESPACE, XMPSchemaPDFAId.class);
- XMPSchemaPDFAId schema = (XMPSchemaPDFAId)
xmp.getSchemaByClass(XMPSchemaPDFAId.class);
- assertEquals("B", schema.getConformance());
- assertEquals((Integer) 3, schema.getPart());
+ assertEquals(2, xmp.getSchemas().size());
+ XMPSchemaPDFAId pdfAIdSchema = (XMPSchemaPDFAId)
xmp.getSchemaByClass(XMPSchemaPDFAId.class);
+ XMPSchemaPDF pdfSchema = xmp.getPDFSchema();
+ assertEquals("WeasyPrint 64.1", pdfSchema.getProducer());
+ assertEquals("B", pdfAIdSchema.getConformance());
+ assertEquals((Integer) 3, pdfAIdSchema.getPart());
}
}
\ No newline at end of file