Author: tilman
Date: Fri Nov 28 10:12:22 2025
New Revision: 1930044

Log:
PDFBOX-2378: revert initial change (avoid rdf namespace declarations getting 
lost in serialization), it is no longer needed

Modified:
   pdfbox/branches/2.0/xmpbox/src/main/java/org/apache/xmpbox/XMPMetadata.java
   
pdfbox/branches/2.0/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java
   
pdfbox/branches/2.0/xmpbox/src/main/java/org/apache/xmpbox/xml/XmpSerializer.java
   
pdfbox/branches/2.0/xmpbox/src/test/java/org/apache/xmpbox/parser/DeserializationTest.java

Modified: 
pdfbox/branches/2.0/xmpbox/src/main/java/org/apache/xmpbox/XMPMetadata.java
==============================================================================
--- pdfbox/branches/2.0/xmpbox/src/main/java/org/apache/xmpbox/XMPMetadata.java 
Fri Nov 28 10:12:16 2025        (r1930043)
+++ pdfbox/branches/2.0/xmpbox/src/main/java/org/apache/xmpbox/XMPMetadata.java 
Fri Nov 28 10:12:22 2025        (r1930044)
@@ -21,7 +21,6 @@
 package org.apache.xmpbox;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -64,8 +63,6 @@ public class XMPMetadata
 
     private final List<XMPSchema> schemas;
 
-    private Map<String, String> rdfAttributeMap = Collections.emptyMap();
-
     private TypeMapping typeMapping;
 
     /**
@@ -598,24 +595,4 @@ public class XMPMetadata
     {
         schemas.clear();
     }
-
-    /**
-     * Get the rdf attribute map (namespace declarations). This is used in 
serialization.
-     *
-     * @return the rdf attribute map.
-     */
-    public Map<String, String> getRdfAttributeMap()
-    {
-        return Collections.unmodifiableMap(rdfAttributeMap);
-    }
-
-    /**
-     * Set the rdf attribute map (namespace declarations). This is used in 
serialization.
-     *
-     * @param rdfAttributeMap an rdf attribute map.
-     */
-    public void setRdfAttributeMap(Map<String, String> rdfAttributeMap)
-    {
-        this.rdfAttributeMap = rdfAttributeMap;
-    }
 }

Modified: 
pdfbox/branches/2.0/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java
==============================================================================
--- 
pdfbox/branches/2.0/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java
    Fri Nov 28 10:12:16 2025        (r1930043)
+++ 
pdfbox/branches/2.0/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java
    Fri Nov 28 10:12:22 2025        (r1930044)
@@ -199,21 +199,6 @@ public class DomXmpParser
             }
         }
 
-        // PDFBOX-2378: keep rdf namespace declarations for later serialization
-        NamedNodeMap attributes = rdfRdf.getAttributes();
-        if (attributes != null)
-        {
-            Map<String, String> rdfAttributeMap = new HashMap<String, 
String>();
-            for (int i = 0; i < attributes.getLength(); ++i)
-            {
-                Node item = attributes.item(i);
-                if 
(XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(item.getNamespaceURI()))
-                {
-                    rdfAttributeMap.put(item.getNodeName(), 
item.getNodeValue());
-                }
-            }
-            xmp.setRdfAttributeMap(rdfAttributeMap);
-        }
         // find schema description
         PdfaExtensionHelper.populateSchemaMapping(xmp);
         // parse data description

Modified: 
pdfbox/branches/2.0/xmpbox/src/main/java/org/apache/xmpbox/xml/XmpSerializer.java
==============================================================================
--- 
pdfbox/branches/2.0/xmpbox/src/main/java/org/apache/xmpbox/xml/XmpSerializer.java
   Fri Nov 28 10:12:16 2025        (r1930043)
+++ 
pdfbox/branches/2.0/xmpbox/src/main/java/org/apache/xmpbox/xml/XmpSerializer.java
   Fri Nov 28 10:12:22 2025        (r1930044)
@@ -100,12 +100,6 @@ public class XmpSerializer
         {
             rdf.appendChild(serializeSchema(doc, schema));
         }
-        // PDFBOX-2378: avoid rdf namespace declarations getting lost in 
serialization
-        Map<String, String> rdfAttributeMap = metadata.getRdfAttributeMap();
-        for (Map.Entry<String, String> entry : rdfAttributeMap.entrySet())
-        {
-            rdf.setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, 
entry.getKey(), entry.getValue());
-        }
         // save
         save(doc, os, "UTF-8");
     }
@@ -168,7 +162,7 @@ public class XmpSerializer
                     }
                 }
 
-                // PDFBOX-2378 part 2: add namespace declaration to the top
+                // PDFBOX-2378: add namespace declaration to the top
                 if (!field.getPrefix().isEmpty() && field.getNamespace() != 
null && !field.getNamespace().isEmpty())
                 {
                     rdf.setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, 
"xmlns:" + field.getPrefix(), field.getNamespace());

Modified: 
pdfbox/branches/2.0/xmpbox/src/test/java/org/apache/xmpbox/parser/DeserializationTest.java
==============================================================================
--- 
pdfbox/branches/2.0/xmpbox/src/test/java/org/apache/xmpbox/parser/DeserializationTest.java
  Fri Nov 28 10:12:16 2025        (r1930043)
+++ 
pdfbox/branches/2.0/xmpbox/src/test/java/org/apache/xmpbox/parser/DeserializationTest.java
  Fri Nov 28 10:12:22 2025        (r1930044)
@@ -53,6 +53,12 @@ import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+/**
+ * DomXmpParser imports the XML into an internal representation. XmpSerializer 
exports this into
+ * XML. The result may look different, but should be the same from a data 
point of view.
+ *
+ * @author Tilman Hausherr
+ */
 public class DeserializationTest
 {
     private ByteArrayOutputStream baos;
@@ -90,7 +96,7 @@ public class DeserializationTest
     {
         InputStream is = 
DomXmpParser.class.getResourceAsStream("/org/apache/xmpbox/parser/structured_recursive.xml");
         XMPMetadata metadata = xdb.parse(is);
-        checkTransform(metadata, 
"52753264982056308826419701767667619100664406974698584945629426171445624909200",
 metadata.getAllSchemas().size());
+        checkTransform(metadata, 
"62495942572014793625872774972947435765670563107818217447706375288846297812281",
 metadata.getAllSchemas().size());
         is.close();
     }
 
@@ -99,7 +105,7 @@ public class DeserializationTest
     {
         InputStream is = 
DomXmpParser.class.getResourceAsStream("/org/apache/xmpbox/parser/empty_list.xml");
         XMPMetadata metadata = xdb.parse(is);
-        checkTransform(metadata, 
"19567447256605061134904612869562878052777123273535814661244629430271579345577",
 metadata.getAllSchemas().size());
+        checkTransform(metadata, 
"95754993383010030299848397520773287413798669761891751126809013411187892693280",
 metadata.getAllSchemas().size());
         is.close();
     }
 
@@ -130,7 +136,7 @@ public class DeserializationTest
     {
         InputStream is = 
DomXmpParser.class.getResourceAsStream("/org/apache/xmpbox/parser/AltBagSeqTest.xml");
         XMPMetadata metadata=xdb.parse(is);
-        checkTransform(metadata, 
"19154431745733679891721944365143324348437445906324353036103478292448653362772",
 metadata.getAllSchemas().size());
+        checkTransform(metadata, 
"89123270336154452745819041017446278583816329940574853160909598044560152910018",
 metadata.getAllSchemas().size());
         is.close();
     }
 
@@ -173,7 +179,7 @@ public class DeserializationTest
         Assert.assertEquals("JPEG", thumb.getFormat());
         Assert.assertEquals("/9j/4AAQSkZJRgABAgEASABIAAD", thumb.getImage());
 
-        checkTransform(metadata, 
"84558386150683037967795120526515137256954964034058806864845109667021390825020",
 metadata.getAllSchemas().size());
+        checkTransform(metadata, 
"64755266855514150823517184659364700851455308334441170957883187622624192802093",
 metadata.getAllSchemas().size());
         is.close();
     }
 
@@ -373,7 +379,7 @@ public class DeserializationTest
         XMPBasicSchema basic = metadata.getXMPBasicSchema();
         Assert.assertNotNull(basic.getCreateDate());
         
-        checkTransform(metadata, 
"103011318952861241491609772230618389876889507758821590919505444434501582047075",
 metadata.getAllSchemas().size());
+        checkTransform(metadata, 
"27499224985683016678197540524065114038595582230834506941950503218519476041225",
 metadata.getAllSchemas().size());
         is.close();
     }
 
@@ -389,7 +395,7 @@ public class DeserializationTest
         // check creator tool
         Assert.assertEquals("Canon 
",metadata.getXMPBasicSchema().getCreatorTool());
         
-        checkTransform(metadata, 
"35040104785033687813052387728441520994588808120158942942660631178163542677230",
 metadata.getAllSchemas().size());
+        checkTransform(metadata, 
"9220923061800113567693538810355030344095407871190202111473587642358933618073", 
metadata.getAllSchemas().size());
         is.close();
     }
 
@@ -432,7 +438,7 @@ public class DeserializationTest
                 + "</x:xmpmeta>\n"
                 + "<?xpacket end=\"w\"?>";
         XMPMetadata metadata = xdb.parse(xmpmeta.getBytes("UTF-8"));
-        checkTransform(metadata, 
"114563613226112098345006389295317658957506710850378716324758103164733276333281",
 metadata.getAllSchemas().size());
+        checkTransform(metadata, 
"19030153876683461724958694183980892665426846590791273142114566290124997390122",
 metadata.getAllSchemas().size());
     }
 
     private void checkTransform(XMPMetadata metadata, String expected, int 
expectedSchemaCount)

Reply via email to