Author: tilman
Date: Wed Dec 24 11:14:59 2025
New Revision: 1930829

Log:
PDFBOX-6131: allow first char lower case in "pdfaProperty:valueType" for 
extension schemas + test

Modified:
   
pdfbox/branches/2.0/xmpbox/src/main/java/org/apache/xmpbox/xml/PdfaExtensionHelper.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/PdfaExtensionHelper.java
==============================================================================
--- 
pdfbox/branches/2.0/xmpbox/src/main/java/org/apache/xmpbox/xml/PdfaExtensionHelper.java
     Wed Dec 24 11:14:54 2025        (r1930828)
+++ 
pdfbox/branches/2.0/xmpbox/src/main/java/org/apache/xmpbox/xml/PdfaExtensionHelper.java
     Wed Dec 24 11:14:59 2025        (r1930829)
@@ -51,8 +51,10 @@ public final class PdfaExtensionHelper
 {
 
     public static final String CLOSED_CHOICE = "closed Choice of ";
+    public static final String CLOSED_CHOICE_U = "Closed Choice of ";
 
     public static final String OPEN_CHOICE = "open Choice of ";
+    public static final String OPEN_CHOICE_U = "Open Choice of ";
 
     private PdfaExtensionHelper()
     {
@@ -290,11 +292,11 @@ public final class PdfaExtensionHelper
             return TypeMapping.createPropertyType(Types.LangAlt, 
Cardinality.Simple);
         }
         // else all other cases
-        if (valueType.startsWith(CLOSED_CHOICE))
+        if (valueType.startsWith(CLOSED_CHOICE) || 
valueType.startsWith(CLOSED_CHOICE_U))
         {
             valueType = valueType.substring(CLOSED_CHOICE.length());
         }
-        else if (valueType.startsWith(OPEN_CHOICE))
+        else if (valueType.startsWith(OPEN_CHOICE) || 
valueType.startsWith(OPEN_CHOICE_U))
         {
             valueType = valueType.substring(OPEN_CHOICE.length());
         }
@@ -302,7 +304,7 @@ public final class PdfaExtensionHelper
         Cardinality card = Cardinality.Simple;
         if (pos > 0)
         {
-            String scard = valueType.substring(0, pos);
+            String scard = valueType.substring(0, pos).toLowerCase();
             if ("seq".equals(scard))
             {
                 card = Cardinality.Seq;

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
        Wed Dec 24 11:14:54 2025        (r1930828)
+++ 
pdfbox/branches/2.0/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
        Wed Dec 24 11:14:59 2025        (r1930829)
@@ -1474,4 +1474,16 @@ public class DomXmpParserTest
             assertEquals("Failed to instantiate DateType property with value 
2019-05-02T22:03:5Z in xmp:CreateDate", ex.getMessage());
         }
     }
+
+    @Test
+    public void testPDFBox6131() throws IOException, XmpParsingException, 
BadFieldValueException
+    {
+        // Contains "Open Choice of Integer" instead of "open Choice of 
Integer"
+        InputStream is = 
DomXmpParser.class.getResourceAsStream("/org/apache/xmpbox/xml/PDFBOX-6131-0015675.xml");
+        DomXmpParser xmpParser = new DomXmpParser();
+        XMPMetadata xmp = xmpParser.parse(is);
+        XMPSchema uaSchema = xmp.getSchema("http://www.aiim.org/pdfua/ns/id/";);
+        assertEquals((Integer) 1, 
uaSchema.getIntegerPropertyValueAsSimple("part"));
+        is.close();
+    }
 }

Reply via email to