]> source.dussan.org Git - poi.git/commitdiff
#62831 Fix WorkbookFactory.create with a subclass of File, eg from JFileChooser
authorNick Burch <nick@apache.org>
Wed, 17 Oct 2018 14:24:59 +0000 (14:24 +0000)
committerNick Burch <nick@apache.org>
Wed, 17 Oct 2018 14:24:59 +0000 (14:24 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1844116 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java
src/ooxml/testcases/org/apache/poi/ss/TestWorkbookFactory.java

index 50833aa6c28dd09b85a731095b2a77bea791b853..aae8c043ce93f14df112f8e08125a524f304342c 100644 (file)
@@ -296,6 +296,11 @@ public class WorkbookFactory {
         return createWorkbook("org.apache.poi.xssf.usermodel.XSSFWorkbookFactory", args);
     }
 
+    /**
+     * Does the actual call to HSSF or XSSF to do the creation.
+     * Uses reflection, so that this class can be in the Core non-OOXML
+     *  POI jar without errors / broken references to the OOXML / XSSF code.
+     */
     private static Workbook createWorkbook(String factoryClass, Object args[]) throws IOException, EncryptedDocumentException {
         try {
             Class<?> clazz = WorkbookFactory.class.getClassLoader().loadClass(factoryClass);
@@ -307,6 +312,8 @@ public class WorkbookFactory {
                     c = boolean.class;
                 } else if (InputStream.class.isAssignableFrom(c)) {
                     c = InputStream.class;
+                } else if (File.class.isAssignableFrom(c)) {
+                    c = File.class;
                 }
                 argsClz[i++] = c;
             }
index e3c631c1da4031ac7b0c28e43378e50d8570a199..32978df88c02a2d38dd4e1ca6b71410485d0c2b6 100644 (file)
 
 package org.apache.poi.ss;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.io.ByteArrayInputStream;
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.FileNotFoundException;
 
 import org.apache.poi.EmptyFileException;
 import org.apache.poi.EncryptedDocumentException;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.hssf.HSSFTestDataSamples;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.openxml4j.opc.PackageAccess;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.ss.usermodel.WorkbookFactory;
@@ -36,10 +42,7 @@ import org.apache.poi.util.POILogFactory;
 import org.apache.poi.util.POILogger;
 import org.apache.poi.util.TempFile;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.apache.poi.openxml4j.opc.OPCPackage;
-import org.apache.poi.openxml4j.opc.PackageAccess;
 import org.apache.poi.xssf.usermodel.XSSFWorkbookFactory;
-import org.junit.Ignore;
 import org.junit.Test;
 
 public final class TestWorkbookFactory {
@@ -393,7 +396,6 @@ public final class TestWorkbookFactory {
      *  to work for sub-classes of File too, eg JFileChooser
      */
     @Test
-    @Ignore
     public void testFileSubclass() throws Exception {
         Workbook wb;