Author: tilman
Date: Sat Dec 27 19:41:42 2025
New Revision: 1930897

Log:
PDFBOX-6135: fallback to text for undefined property in lenient mode + test

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

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
    Sat Dec 27 16:22:29 2025        (r1930896)
+++ 
pdfbox/branches/2.0/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java
    Sat Dec 27 19:41:42 2025        (r1930897)
@@ -793,11 +793,15 @@ public class DomXmpParser
             PropertyType type = pm.getPropertyType(name);
             if (type == null)
             {
-                // not defined
-                throw new XmpParsingException(ErrorType.NoType, "Type '" + 
prefix + ":" + name + "' not defined in "
-                        + liDescriptionElementChild.getNamespaceURI());
+                if (strictParsing)
+                {
+                    throw new XmpParsingException(ErrorType.NoType, "Type '" + 
prefix + ":" + name + "' not defined in "
+                            + liDescriptionElementChild.getNamespaceURI());
+                }
+                // PDFBOX-6135: Default to text if no type is found
+                type = TypeMapping.createPropertyType(Types.Text, 
Cardinality.Simple);
             }
-            else if (type.card().isArray())
+            if (type.card().isArray())
             {
                 ArrayProperty array = tm.createArrayProperty(namespace, 
prefix, name, type.card());
                 ast.getContainer().addProperty(array);

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
        Sat Dec 27 16:22:29 2025        (r1930896)
+++ 
pdfbox/branches/2.0/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
        Sat Dec 27 19:41:42 2025        (r1930897)
@@ -1106,6 +1106,42 @@ public class DomXmpParserTest
     }
 
     @Test
+    public void testBadProp2() throws XmpParsingException, 
UnsupportedEncodingException
+    {
+        // PDFBOX-6135: from file 000316.pdf, stRef:documentName isn't defined
+        String s = 
+                "<?xml version=\"1.0\" encoding=\"UTF-8\" 
standalone=\"no\"?>\n" +
+                "<?xpacket begin=\"\" 
id=\"W5M0MpCehiHzreSzNTczkc9d\"?><x:xmpmeta xmlns:x=\"adobe:ns:meta/\" 
x:xmptk=\"3.1-701\">\n" +
+                "    <rdf:RDF 
xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\";>\n" +
+                "        <rdf:Description 
xmlns:stRef=\"http://ns.adobe.com/xap/1.0/sType/ResourceRef#\"; 
xmlns:xapMM=\"http://ns.adobe.com/xap/1.0/mm/\"; rdf:about=\"\">\n" +
+                "            
<xapMM:DocumentID>uuid:CE03288B61A6DB11A55CA11F14F48514</xapMM:DocumentID>\n" +
+                "            
<xapMM:InstanceID>uuid:474647e9-680a-47dc-83d5-ba3f3a7e2a67</xapMM:InstanceID>\n"
 +
+                "            <xapMM:DerivedFrom rdf:parseType=\"Resource\">\n" 
+
+                "                
<stRef:documentName>uuid:8705447f-b80d-4cc8-82f7-0ec27187edfe</stRef:documentName>\n"
 +
+                "                
<stRef:documentID>uuid:b2f88223-2723-430d-b93c-3503ccb0e34b</stRef:documentID>\n"
 +
+                "            </xapMM:DerivedFrom>\n" +
+                "        </rdf:Description>\n" +
+                "    </rdf:RDF>\n" +
+                "</x:xmpmeta><?xpacket end=\"w\"?>";
+        try
+        {
+            new DomXmpParser().parse(s.getBytes("utf-8"));
+            fail("XmpParsingException expected");
+        }
+        catch (XmpParsingException ex)
+        {
+            assertEquals("Type 'stRef:documentName' not defined in 
http://ns.adobe.com/xap/1.0/sType/ResourceRef#";, ex.getMessage());
+        }
+        final DomXmpParser xmpParser2 = new DomXmpParser();
+        xmpParser2.setStrictParsing(false);
+        XMPMetadata xmp2 = xmpParser2.parse(s.getBytes("utf-8"));
+        XMPMediaManagementSchema xmpMediaManagementSchema = 
xmp2.getXMPMediaManagementSchema();
+        ResourceRefType derived = 
xmpMediaManagementSchema.getDerivedFromProperty();
+        assertEquals("uuid:b2f88223-2723-430d-b93c-3503ccb0e34b", 
derived.getDocumentID());
+        
assertEquals("[documentName=TextType:uuid:8705447f-b80d-4cc8-82f7-0ec27187edfe]",
 derived.getProperty("documentName").toString());
+    }
+
+    @Test
     public void testParseFailure() throws XmpParsingException, 
UnsupportedEncodingException
     {
         String s = "<?xml version=\"1.0\" encoding=\"UTF-8\" 
standalone=\"no\"?>";

Reply via email to