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 2025/12/31 16:30:17 UTC
svn commit: r1931011 - pdfbox/branches/2.0/xmpbox/src/main/java/org/apache/xmpbox/xml
Author: tilman
Date: Wed Dec 31 16:30:17 2025
New Revision: 1931011
Log:
PDFBOX-5660: refactor
Modified:
pdfbox/branches/2.0/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.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 Wed Dec 31 16:30:03 2025 (r1931010)
+++ pdfbox/branches/2.0/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java Wed Dec 31 16:30:17 2025 (r1931011)
@@ -1114,81 +1114,68 @@ public class DomXmpParser
for (int i = 0; i < attributes.getLength(); ++i)
{
Attr attr = (Attr) attributes.item(i);
- if (XMLConstants.XMLNS_ATTRIBUTE.equals(attr.getPrefix()))
+ if (XMLConstants.XMLNS_ATTRIBUTE.equals(attr.getPrefix()) ||
+ XMLConstants.XML_NS_URI.equals(attr.getNamespaceURI()) ||
+ XmpConstants.DEFAULT_RDF_PREFIX.equals(attr.getPrefix()))
{
// do nothing
+ continue;
}
- else if (XmpConstants.DEFAULT_RDF_PREFIX.equals(attr.getPrefix())
- && XmpConstants.ABOUT_NAME.equals(attr.getLocalName()))
+ if (ast == null && attr.getNamespaceURI() != null) // What to do if attr.getNamespaceURI() is null?
{
- // do nothing (maybe later?)
- }
- else if (XMLConstants.XML_NS_URI.equals(attr.getNamespaceURI()))
- {
- // do nothing
- }
- else if (XmpConstants.DEFAULT_RDF_PREFIX.equals(attr.getPrefix()))
- {
- // other rdf stuff, e.g. rdf:parseType
+ // like in parseLiDescription():
+ // Instantiate abstract structured type with hint from first element
+ QName attrQName = new QName(attr.getNamespaceURI(), attr.getLocalName(), attr.getPrefix());
+ PropertyType ctype = checkPropertyDefinition(tm, attrQName, null);
+ // this is the type of the AbstractStructuredType, not of the element(s)
+ if (ctype == null)
+ {
+ throw new XmpParsingException(ErrorType.NoType,
+ "Property '" + attrQName.getLocalPart() + "' not defined in " + attrQName.getNamespaceURI());
+ }
+ Types tt = ctype.type();
+ ast = instanciateStructured(tm, tt, qName.getLocalPart(), attr.getNamespaceURI());
+ if (tt.isStructured())
+ {
+ pm = tm.getStructuredPropMapping(tt);
+ }
+ else
+ {
+ pm = tm.getDefinedDescriptionByNamespace(attr.getNamespaceURI(), attr.getLocalName());
+ }
}
- else
+ if (ast != null && pm != null && attr.getNamespaceURI() != null)
{
- if (ast == null && attr.getNamespaceURI() != null) // What to do if attr.getNamespaceURI() is null?
+ PropertyType type = pm.getPropertyType(attr.getLocalName());
+ if (type == null)
{
- // like in parseLiDescription():
- // Instantiate abstract structured type with hint from first element
- QName attrQName = new QName(attr.getNamespaceURI(), attr.getLocalName(), attr.getPrefix());
- PropertyType ctype = checkPropertyDefinition(tm, attrQName, null);
- // this is the type of the AbstractStructuredType, not of the element(s)
- if (ctype == null)
- {
- throw new XmpParsingException(ErrorType.NoType,
- "Property '" + attrQName.getLocalPart() + "' not defined in " + attrQName.getNamespaceURI());
- }
- Types tt = ctype.type();
- ast = instanciateStructured(tm, tt, qName.getLocalPart(), attr.getNamespaceURI());
- if (tt.isStructured())
- {
- pm = tm.getStructuredPropMapping(tt);
- }
- else
+ if (strictParsing)
{
- pm = tm.getDefinedDescriptionByNamespace(attr.getNamespaceURI(), attr.getLocalName());
+ throw new XmpParsingException(ErrorType.InvalidType, "No type defined for {" + attr.getNamespaceURI() + "}"
+ + attr.getLocalName());
}
+ // PDFBOX-2318, PDFBOX-6106: Default to text if no type is found
+ type = TypeMapping.createPropertyType(Types.Text, Cardinality.Simple);
}
- if (ast != null && pm != null && attr.getNamespaceURI() != null)
+ else if (!type.type().isSimple() || type.card().isArray() || type.type() == Types.LangAlt)
{
- PropertyType type = pm.getPropertyType(attr.getLocalName());
- if (type == null)
+ if (strictParsing)
{
- if (strictParsing)
- {
- throw new XmpParsingException(ErrorType.InvalidType, "No type defined for {" + attr.getNamespaceURI() + "}"
- + attr.getLocalName());
- }
- // PDFBOX-2318, PDFBOX-6106: Default to text if no type is found
- type = TypeMapping.createPropertyType(Types.Text, Cardinality.Simple);
+ throw new XmpParsingException(ErrorType.InvalidType, "The type '" +
+ type.type().name() + "' in '" + attr.getPrefix() + ":" + attr.getLocalName() + "=" + attr.getValue()
+ + "' is a structured or array type, but attributes are simple types");
}
- else if (!type.type().isSimple() || type.card().isArray() || type.type() == Types.LangAlt)
+ // PDFBOX-6125: Default to text or skip
+ if (attr.getValue() == null || attr.getValue().isEmpty())
{
- if (strictParsing)
- {
- throw new XmpParsingException(ErrorType.InvalidType, "The type '" +
- type.type().name() + "' in '" + attr.getPrefix() + ":" + attr.getLocalName() + "=" + attr.getValue()
- + "' is a structured or array type, but attributes are simple types");
- }
- // PDFBOX-6125: Default to text or skip
- if (attr.getValue() == null || attr.getValue().isEmpty())
- {
- continue;
- }
- type = TypeMapping.createPropertyType(Types.Text, Cardinality.Simple);
+ continue;
}
- AbstractSimpleProperty asp = tm.instanciateSimpleProperty(
- attr.getNamespaceURI(), attr.getPrefix(), attr.getLocalName(),
- attr.getValue(), type.type());
- ast.getContainer().addProperty(asp);
+ type = TypeMapping.createPropertyType(Types.Text, Cardinality.Simple);
}
+ AbstractSimpleProperty asp = tm.instanciateSimpleProperty(
+ attr.getNamespaceURI(), attr.getPrefix(), attr.getLocalName(),
+ attr.getValue(), type.type());
+ ast.getContainer().addProperty(asp);
}
}
return ast;