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());
+    }
 }