FOP-2942: COSNull not supported error
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop-pdf-images/trunk@1878710 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/java/org/apache/fop/render/pdf/pdfbox/PageParentTreeFinder.java b/src/java/org/apache/fop/render/pdf/pdfbox/PageParentTreeFinder.java
index 0aa5950..0aeeda7 100644
--- a/src/java/org/apache/fop/render/pdf/pdfbox/PageParentTreeFinder.java
+++ b/src/java/org/apache/fop/render/pdf/pdfbox/PageParentTreeFinder.java
@@ -121,7 +121,9 @@
if (keyFlag) {
if (kid instanceof COSObject) {
tempObject = ((COSObject)kid).getObject();
- return (COSArray)tempObject;
+ if (tempObject instanceof COSArray) {
+ return (COSArray) tempObject;
+ }
} else if (kid instanceof COSArray) {
return (COSArray)kid;
}
diff --git a/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMergerUtil.java b/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMergerUtil.java
index a002d46..7ca03f5 100644
--- a/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMergerUtil.java
+++ b/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMergerUtil.java
@@ -45,10 +45,12 @@
List<String> keys = new ArrayList<String>();
if (roleMap != null) {
for (Entry<COSName, COSBase> entry : roleMap.entrySet()) {
- String value = ((COSName)entry.getValue()).getName();
- String key = entry.getKey().getName();
- if (type.equals(value)) {
- keys.add(key);
+ if (entry.getValue() instanceof COSName) {
+ String value = ((COSName) entry.getValue()).getName();
+ String key = entry.getKey().getName();
+ if (type.equals(value)) {
+ keys.add(key);
+ }
}
}
}
diff --git a/test/java/org/apache/fop/render/pdf/PageParentTreeFinderTestCase.java b/test/java/org/apache/fop/render/pdf/PageParentTreeFinderTestCase.java
index c493b5a..0a94b9c 100644
--- a/test/java/org/apache/fop/render/pdf/PageParentTreeFinderTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/PageParentTreeFinderTestCase.java
@@ -27,6 +27,7 @@
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSInteger;
import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.cos.COSNull;
import org.apache.pdfbox.cos.COSObject;
import org.apache.pdfbox.pdmodel.PDDocument;
@@ -36,8 +37,6 @@
import org.apache.fop.render.pdf.pdfbox.PageParentTreeFinder;
-
-
public class PageParentTreeFinderTestCase {
private static final String LINK = "test/resources/linkTagged.pdf";
@@ -92,4 +91,18 @@
Assert.assertEquals(numList.size(), 3);
doc.close();
}
+
+ @Test
+ public void testCOSNull() throws IOException {
+ PDDocument doc = PDDocument.load(new File(LINK));
+ PDNumberTreeNode srcNumberTreeNode = doc.getDocumentCatalog().getStructureTreeRoot().getParentTree();
+ COSArray parentTree = (COSArray) srcNumberTreeNode.getCOSObject().getDictionaryObject(COSName.KIDS);
+ COSObject kidCOSObj = (COSObject) parentTree.get(0);
+ COSArray nums = (COSArray) kidCOSObj.getDictionaryObject(COSName.NUMS);
+ nums.add(0, COSInteger.ZERO);
+ nums.add(1, new COSObject(COSNull.NULL));
+ COSArray numList = new PageParentTreeFinder(doc.getPage(0)).getPageParentTreeArray(doc);
+ Assert.assertEquals(numList.size(), 3);
+ doc.close();
+ }
}
diff --git a/test/java/org/apache/fop/render/pdf/StructureTreeMergerUtilTestCase.java b/test/java/org/apache/fop/render/pdf/StructureTreeMergerUtilTestCase.java
index ea39b65..7b0c4dd 100644
--- a/test/java/org/apache/fop/render/pdf/StructureTreeMergerUtilTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/StructureTreeMergerUtilTestCase.java
@@ -24,11 +24,10 @@
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.cos.COSNull;
import org.apache.fop.render.pdf.pdfbox.StructureTreeMergerUtil;
-
-
public class StructureTreeMergerUtilTestCase {
@Test
@@ -47,4 +46,12 @@
String expected = "Icon";
Assert.assertEquals(test, expected);
}
+
+ @Test
+ public void testCOSNull() {
+ COSDictionary rolemap = new COSDictionary();
+ rolemap.setItem(COSName.A, COSNull.NULL);
+ List<String> result = StructureTreeMergerUtil.findRoleMapKeyByValue(null, rolemap);
+ Assert.assertTrue(result.isEmpty());
+ }
}