You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2018/09/27 19:32:07 UTC

svn commit: r1842148 - /pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java

Author: tilman
Date: Thu Sep 27 19:32:06 2018
New Revision: 1842148

URL: http://svn.apache.org/viewvc?rev=1842148&view=rev
Log:
PDFBOX-4325: parse structured types too to avoid ClassCastException

Modified:
    pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java

Modified: pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java?rev=1842148&r1=1842147&r2=1842148&view=diff
==============================================================================
--- pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java (original)
+++ pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java Thu Sep 27 19:32:06 2018
@@ -514,10 +514,28 @@ public class DomXmpParser
             // no child
             String text = liElement.getTextContent();
             TypeMapping tm = xmp.getTypeMapping();
-            AbstractSimpleProperty sp = tm.instanciateSimpleProperty(descriptor.getNamespaceURI(),
-                    descriptor.getPrefix(), descriptor.getLocalPart(), text, type);
-            loadAttributes(sp, liElement);
-            return sp;
+            if (type.isSimple())
+            {
+                AbstractField af = tm.instanciateSimpleProperty(descriptor.getNamespaceURI(),
+                        descriptor.getPrefix(), descriptor.getLocalPart(), text, type);
+                loadAttributes(af, liElement);
+                return af;
+            }
+            else
+            {
+                // PDFBOX-4325: assume it is structured
+                AbstractField af;
+                try
+                {
+                    af = tm.instanciateStructuredType(type, descriptor.getLocalPart());
+                }
+                catch (BadFieldValueException ex)
+                {
+                    throw new XmpParsingException(ErrorType.InvalidType, "Parsing of structured type failed", ex);
+                }
+                loadAttributes(af, liElement);
+                return af;
+            }
         }
     }