You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2014/10/12 15:35:35 UTC
svn commit: r1631175 - in /pdfbox/trunk/xmpbox: pom.xml
src/main/java/org/apache/xmpbox/xml/DomXmpParser.java
Author: lehmi
Date: Sun Oct 12 13:35:35 2014
New Revision: 1631175
URL: http://svn.apache.org/r1631175
Log:
PDFBOX-2318: avoid NPE when parsing a XMP-file containing an undefined type as proposed by Jeremy Anderson
Modified:
pdfbox/trunk/xmpbox/pom.xml
pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java
Modified: pdfbox/trunk/xmpbox/pom.xml
URL: http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/pom.xml?rev=1631175&r1=1631174&r2=1631175&view=diff
==============================================================================
--- pdfbox/trunk/xmpbox/pom.xml (original)
+++ pdfbox/trunk/xmpbox/pom.xml Sun Oct 12 13:35:35 2014
@@ -42,6 +42,10 @@
<artifactId>commons-io</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </dependency>
</dependencies>
<build>
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=1631175&r1=1631174&r2=1631175&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 Sun Oct 12 13:35:35 2014
@@ -37,6 +37,8 @@ import javax.xml.parsers.DocumentBuilder
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.xmpbox.XMPMetadata;
import org.apache.xmpbox.XmpConstants;
import org.apache.xmpbox.schema.XMPSchema;
@@ -68,6 +70,12 @@ import org.xml.sax.SAXException;
public class DomXmpParser
{
+ /**
+ * Log instance.
+ */
+ private static final Log LOG = LogFactory.getLog(DomXmpParser.class);
+
+
private DocumentBuilder dBuilder;
private NamespaceFinder nsFinder;
@@ -230,19 +238,37 @@ public class DomXmpParser
{
String namespace = attr.getNamespaceURI();
XMPSchema schema = xmp.getSchema(namespace);
- if (schema == null)
+ if (schema == null && tm.getSchemaFactory(namespace) != null)
{
schema = tm.getSchemaFactory(namespace).createXMPSchema(xmp, attr.getPrefix());
loadAttributes(schema, description);
}
- ComplexPropertyContainer container = schema.getContainer();
- PropertyType type = checkPropertyDefinition(xmp,
- new QName(attr.getNamespaceURI(), attr.getLocalName()));
- AbstractSimpleProperty sp = tm.instanciateSimpleProperty(namespace, schema.getPrefix(),
- attr.getLocalName(), attr.getValue(), type.type());
- container.addProperty(sp);
+ // Only process when a schema was successfully found
+ if( schema != null )
+ {
+ ComplexPropertyContainer container = schema.getContainer();
+ PropertyType type = checkPropertyDefinition(xmp,
+ new QName(attr.getNamespaceURI(), attr.getLocalName()));
+
+ //Default to text if no type is found
+ if( type == null)
+ {
+ type = TypeMapping.createPropertyType(Types.Text, Cardinality.Simple);
+ }
+
+ try
+ {
+ AbstractSimpleProperty sp = tm.instanciateSimpleProperty(namespace, schema.getPrefix(),
+ attr.getLocalName(), attr.getValue(), type.type());
+ container.addProperty(sp);
+ }
+ catch( IllegalArgumentException exception)
+ {
+ //Swallow, and continue adding additional properties
+ LOG.warn("Unable to add property: "+ attr.getLocalName() + " value: "+attr.getValue(),exception);
+ }
+ }
}
-
}
// parse children elements as properties
for (Element property : properties)