Skip to content

Commit 3f5e792

Browse files
committed
PDFBOX-6136: ignore empty prefix
git-svn-id: https://svn.apache.org/repos/asf/pdfbox/trunk@1930979 13f79535-47bb-0310-9956-ffa450edef68
1 parent 00b7adc commit 3f5e792

File tree

2 files changed

+117
-0
lines changed

2 files changed

+117
-0
lines changed

xmpbox/src/main/java/org/apache/xmpbox/xml/PdfaExtensionHelper.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ public static void validateNaming(XMPMetadata meta, Element description) throws
7878
private static void checkNamespaceDeclaration(Attr attr, Class<? extends AbstractStructuredType> clz)
7979
throws XmpParsingException
8080
{
81+
if (attr.getPrefix() == null)
82+
{
83+
// PDFBOX-6136: not relevant here
84+
return;
85+
}
8186
String prefix = attr.getLocalName();
8287
String namespace = attr.getValue();
8388
String cprefix = clz.getAnnotation(StructuredType.class).preferedPrefix();

xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1576,4 +1576,116 @@ void testPropertyNotDefined2() throws XmpParsingException
15761576
ArrayProperty ap = (ArrayProperty) cfa.getProperty(CFAPatternType.VALUES);
15771577
assertEquals("[1, 2, 0, 1]", ap.getElementsAsString().toString());
15781578
}
1579+
1580+
/**
1581+
* PDFBOX-6136: corner case of extension schema because of "xmlns="
1582+
*
1583+
* @throws XmpParsingException
1584+
*/
1585+
@Test
1586+
void testPDFBox6136() throws XmpParsingException
1587+
{
1588+
// File 0018804.pdf (Italian parliament)
1589+
// xmlns="http://www.aiim.org/pdfa/ns/extension/" xmlns:pdfaExtension="http://www.aiim.org/pdfa/ns/extension/"
1590+
String s =
1591+
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n" +
1592+
"<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d' bytes='6865'?><rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:iX=\"http://ns.adobe.com/iX/1.0/\">\n" +
1593+
" <rdf:Description xmlns=\"http://www.aiim.org/pdfa/ns/extension/\" xmlns:pdfaExtension=\"http://www.aiim.org/pdfa/ns/extension/\" xmlns:pdfaProperty=\"http://www.aiim.org/pdfa/ns/property#\" xmlns:pdfaSchema=\"http://www.aiim.org/pdfa/ns/schema#\" about=\"\">\n" +
1594+
" <pdfaExtension:schemas>\n" +
1595+
" <rdf:Bag>\n" +
1596+
" <rdf:li rdf:parseType=\"Resource\">\n" +
1597+
" <pdfaSchema:namespaceURI>http://ns.adobe.com/pdfx/1.3/</pdfaSchema:namespaceURI>\n" +
1598+
" <pdfaSchema:prefix>pdfx</pdfaSchema:prefix>\n" +
1599+
" <pdfaSchema:schema>Adobe Document Info PDF eXtension Schema</pdfaSchema:schema>\n" +
1600+
" <pdfaSchema:property>\n" +
1601+
" <rdf:Seq>\n" +
1602+
" <rdf:li rdf:parseType=\"Resource\">\n" +
1603+
" <pdfaProperty:category>internal</pdfaProperty:category>\n" +
1604+
" <pdfaProperty:description>ID of PDF/X standard</pdfaProperty:description>\n" +
1605+
" <pdfaProperty:name>GTS_PDFXVersion</pdfaProperty:name>\n" +
1606+
" <pdfaProperty:valueType>Text</pdfaProperty:valueType>\n" +
1607+
" </rdf:li>\n" +
1608+
" <rdf:li rdf:parseType=\"Resource\">\n" +
1609+
" <pdfaProperty:category>internal</pdfaProperty:category>\n" +
1610+
" <pdfaProperty:description>Conformance level of PDF/X standard</pdfaProperty:description>\n" +
1611+
" <pdfaProperty:name>GTS_PDFXConformance</pdfaProperty:name>\n" +
1612+
" <pdfaProperty:valueType>Text</pdfaProperty:valueType>\n" +
1613+
" </rdf:li>\n" +
1614+
" <rdf:li rdf:parseType=\"Resource\">\n" +
1615+
" <pdfaProperty:category>internal</pdfaProperty:category>\n" +
1616+
" <pdfaProperty:description>Company creating the PDF</pdfaProperty:description>\n" +
1617+
" <pdfaProperty:name>Company</pdfaProperty:name>\n" +
1618+
" <pdfaProperty:valueType>Text</pdfaProperty:valueType>\n" +
1619+
" </rdf:li>\n" +
1620+
" <rdf:li rdf:parseType=\"Resource\">\n" +
1621+
" <pdfaProperty:category>internal</pdfaProperty:category>\n" +
1622+
" <pdfaProperty:description>Date when document was last modified</pdfaProperty:description>\n" +
1623+
" <pdfaProperty:name>SourceModified</pdfaProperty:name>\n" +
1624+
" <pdfaProperty:valueType>Text</pdfaProperty:valueType>\n" +
1625+
" </rdf:li>\n" +
1626+
" </rdf:Seq>\n" +
1627+
" </pdfaSchema:property>\n" +
1628+
" </rdf:li>\n" +
1629+
" <rdf:li rdf:parseType=\"Resource\">\n" +
1630+
" <pdfaSchema:namespaceURI>http://ns.adobe.com/xap/1.0/mm/</pdfaSchema:namespaceURI>\n" +
1631+
" <pdfaSchema:prefix>xmpMM</pdfaSchema:prefix>\n" +
1632+
" <pdfaSchema:schema>XMP Media Management Schema</pdfaSchema:schema>\n" +
1633+
" <pdfaSchema:property>\n" +
1634+
" <rdf:Seq>\n" +
1635+
" <rdf:li rdf:parseType=\"Resource\">\n" +
1636+
" <pdfaProperty:category>internal</pdfaProperty:category>\n" +
1637+
" <pdfaProperty:description>UUID based identifier for specific incarnation of a document</pdfaProperty:description>\n" +
1638+
" <pdfaProperty:name>InstanceID</pdfaProperty:name>\n" +
1639+
" <pdfaProperty:valueType>URI</pdfaProperty:valueType>\n" +
1640+
" </rdf:li>\n" +
1641+
" <rdf:li rdf:parseType=\"Resource\">\n" +
1642+
" <pdfaProperty:category>internal</pdfaProperty:category>\n" +
1643+
" <pdfaProperty:description>The common identifier for all versions and renditions of a document.</pdfaProperty:description>\n" +
1644+
" <pdfaProperty:name>OriginalDocumentID</pdfaProperty:name>\n" +
1645+
" <pdfaProperty:valueType>URI</pdfaProperty:valueType>\n" +
1646+
" </rdf:li>\n" +
1647+
" </rdf:Seq>\n" +
1648+
" </pdfaSchema:property>\n" +
1649+
" </rdf:li>\n" +
1650+
" <rdf:li rdf:parseType=\"Resource\">\n" +
1651+
" <pdfaSchema:namespaceURI>http://www.aiim.org/pdfa/ns/id/</pdfaSchema:namespaceURI>\n" +
1652+
" <pdfaSchema:prefix>pdfaid</pdfaSchema:prefix>\n" +
1653+
" <pdfaSchema:schema>PDF/A ID Schema</pdfaSchema:schema>\n" +
1654+
" <pdfaSchema:property>\n" +
1655+
" <rdf:Seq>\n" +
1656+
" <rdf:li rdf:parseType=\"Resource\">\n" +
1657+
" <pdfaProperty:category>internal</pdfaProperty:category>\n" +
1658+
" <pdfaProperty:description>Part of PDF/A standard</pdfaProperty:description>\n" +
1659+
" <pdfaProperty:name>part</pdfaProperty:name>\n" +
1660+
" <pdfaProperty:valueType>Integer</pdfaProperty:valueType>\n" +
1661+
" </rdf:li>\n" +
1662+
" <rdf:li rdf:parseType=\"Resource\">\n" +
1663+
" <pdfaProperty:category>internal</pdfaProperty:category>\n" +
1664+
" <pdfaProperty:description>Amendment of PDF/A standard</pdfaProperty:description>\n" +
1665+
" <pdfaProperty:name>amd</pdfaProperty:name>\n" +
1666+
" <pdfaProperty:valueType>Text</pdfaProperty:valueType>\n" +
1667+
" </rdf:li>\n" +
1668+
" <rdf:li rdf:parseType=\"Resource\">\n" +
1669+
" <pdfaProperty:category>internal</pdfaProperty:category>\n" +
1670+
" <pdfaProperty:description>Conformance level of PDF/A standard</pdfaProperty:description>\n" +
1671+
" <pdfaProperty:name>conformance</pdfaProperty:name>\n" +
1672+
" <pdfaProperty:valueType>Text</pdfaProperty:valueType>\n" +
1673+
" </rdf:li>\n" +
1674+
" </rdf:Seq>\n" +
1675+
" </pdfaSchema:property>\n" +
1676+
" </rdf:li>\n" +
1677+
" </rdf:Bag>\n" +
1678+
" </pdfaExtension:schemas>\n" +
1679+
" </rdf:Description>\n" +
1680+
" <rdf:Description xmlns=\"http://www.aiim.org/pdfa/ns/id/\" xmlns:pdfaid=\"http://www.aiim.org/pdfa/ns/id/\" about=\"\">\n" +
1681+
" <pdfaid:part>1</pdfaid:part>\n" +
1682+
" <pdfaid:conformance>B</pdfaid:conformance>\n" +
1683+
" </rdf:Description>\n" +
1684+
"</rdf:RDF><?xpacket end='r'?>";
1685+
final DomXmpParser xmpParser = new DomXmpParser();
1686+
xmpParser.setStrictParsing(false);
1687+
XMPMetadata xmp = xmpParser.parse(s.getBytes(StandardCharsets.UTF_8));
1688+
assertEquals("B", xmp.getPDFAIdentificationSchema().getConformance());
1689+
assertEquals((Integer) 1, xmp.getPDFAIdentificationSchema().getPart());
1690+
}
15791691
}

0 commit comments

Comments
 (0)