Author: tilman
Date: Wed Dec 24 11:14:54 2025
New Revision: 1930828

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

Modified:
   
pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/PdfaExtensionHelper.java
   pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java

Modified: 
pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/PdfaExtensionHelper.java
==============================================================================
--- 
pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/PdfaExtensionHelper.java
    Wed Dec 24 10:35:20 2025        (r1930827)
+++ 
pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/PdfaExtensionHelper.java
    Wed Dec 24 11:14:54 2025        (r1930828)
@@ -51,9 +51,11 @@ import org.w3c.dom.NamedNodeMap;
 public final class PdfaExtensionHelper
 {
 
-    public static final String CLOSED_CHOICE = "closed Choice of ";
+    private static final String CLOSED_CHOICE = "closed Choice of ";
+    private static final String CLOSED_CHOICE_U = "Closed Choice of ";
 
-    public static final String OPEN_CHOICE = "open Choice of ";
+    private static final String OPEN_CHOICE = "open Choice of ";
+    private static final String OPEN_CHOICE_U = "Open Choice of ";
 
     private PdfaExtensionHelper()
     {
@@ -263,11 +265,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());
         }
@@ -275,7 +277,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();
             switch (scard)
             {
                 case "seq":

Modified: 
pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
==============================================================================
--- 
pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java   
    Wed Dec 24 10:35:20 2025        (r1930827)
+++ 
pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java   
    Wed Dec 24 11:14:54 2025        (r1930828)
@@ -1396,4 +1396,17 @@ class DomXmpParserTest
                 () -> xmpParser1.parse(s.getBytes(StandardCharsets.UTF_8)));
         assertEquals("Failed to instantiate DateType property with value 
2019-05-02T22:03:5Z in xmp:CreateDate", ex.getMessage());
     }
+
+    @Test
+    void testPDFBox6131() throws IOException, XmpParsingException, 
BadFieldValueException
+    {
+        // Contains "Open Choice of Integer" instead of "open Choice of 
Integer"
+        try (InputStream is = 
DomXmpParser.class.getResourceAsStream("/org/apache/xmpbox/xml/PDFBOX-6131-0015675.xml"))
+        {
+            DomXmpParser xmpParser = new DomXmpParser();
+            XMPMetadata xmp = xmpParser.parse(is);
+            XMPSchema uaSchema2  = 
xmp.getSchema("http://www.aiim.org/pdfua/ns/id/";);
+            assertEquals(1, uaSchema2.getIntegerPropertyValueAsSimple("part"));
+        }
+    }
 }

Reply via email to