You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by fa...@apache.org on 2020/05/15 07:36:27 UTC
svn commit: r1877776 - in /poi/trunk/src:
java/org/apache/poi/hssf/usermodel/HSSFWorkbookFactory.java
java/org/apache/poi/ss/usermodel/WorkbookFactory.java
ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbookFactory.java
Author: fanningpj
Date: Fri May 15 07:36:27 2020
New Revision: 1877776
URL: http://svn.apache.org/viewvc?rev=1877776&view=rev
Log:
[bug-64441] synchronize code that initialises WorkbookFactory
Modified:
poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbookFactory.java
poi/trunk/src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbookFactory.java
Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbookFactory.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbookFactory.java?rev=1877776&r1=1877775&r2=1877776&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbookFactory.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbookFactory.java Fri May 15 07:36:27 2020
@@ -33,6 +33,10 @@ import org.apache.poi.util.Internal;
public class HSSFWorkbookFactory extends WorkbookFactory {
static {
+ init();
+ }
+
+ public static void init() {
WorkbookFactory.createHssfFromScratch = HSSFWorkbookFactory::createWorkbook;
WorkbookFactory.createHssfByNode = HSSFWorkbookFactory::createWorkbook;
}
Modified: poi/trunk/src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java?rev=1877776&r1=1877775&r2=1877776&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java Fri May 15 07:36:27 2020
@@ -53,6 +53,8 @@ public abstract class WorkbookFactory {
Workbook apply(T t, U u) throws IOException;
}
+ private static Object hssfLock = new Object();
+ private static Object xssfLock = new Object();
protected static CreateWorkbook0 createHssfFromScratch;
protected static CreateWorkbook1<DirectoryNode> createHssfByNode;
@@ -333,20 +335,40 @@ public abstract class WorkbookFactory {
private static void initXssf() throws IOException {
if (createXssfFromScratch == null) {
- initFactory("org.apache.poi.xssf.usermodel.XSSFWorkbookFactory", "poi-ooxml-*.jar");
+ synchronized (xssfLock) {
+ if (createXssfFromScratch == null) {
+ String factoryClass = "org.apache.poi.xssf.usermodel.XSSFWorkbookFactory";
+ Class cls = initFactory(factoryClass, "poi-ooxml-*.jar");
+ try {
+ cls.getMethod("init").invoke(null);
+ } catch (Exception e) {
+ throw new IOException(factoryClass+" failed to init.");
+ }
+ }
+ }
}
}
private static void initHssf() throws IOException {
if (createHssfFromScratch == null) {
// HSSF is part of the main jar, so this shouldn't fail ...
- initFactory("org.apache.poi.hssf.usermodel.HSSFWorkbookFactory", "poi-*.jar");
+ synchronized (hssfLock) {
+ if (createHssfFromScratch == null) {
+ String factoryClass = "org.apache.poi.hssf.usermodel.HSSFWorkbookFactory";
+ Class cls = initFactory(factoryClass, "poi-*.jar");
+ try {
+ cls.getMethod("init").invoke(null);
+ } catch (Exception e) {
+ throw new IOException(factoryClass+" failed to init.");
+ }
+ }
+ }
}
}
- private static void initFactory(String factoryClass, String jar) throws IOException {
+ private static Class initFactory(String factoryClass, String jar) throws IOException {
try {
- Class.forName(factoryClass, true, WorkbookFactory.class.getClassLoader());
+ return Class.forName(factoryClass, true, WorkbookFactory.class.getClassLoader());
} catch (ClassNotFoundException e) {
throw new IOException(factoryClass+" not found - check if " + jar + " is on the classpath.");
}
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbookFactory.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbookFactory.java?rev=1877776&r1=1877775&r2=1877776&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbookFactory.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbookFactory.java Fri May 15 07:36:27 2020
@@ -31,13 +31,16 @@ import org.apache.poi.ss.usermodel.Workb
public class XSSFWorkbookFactory extends WorkbookFactory {
static {
+ init();
+ }
+
+ public static void init() {
WorkbookFactory.createXssfFromScratch = XSSFWorkbookFactory::createWorkbook;
WorkbookFactory.createXssfByStream = XSSFWorkbookFactory::createWorkbook;
WorkbookFactory.createXssfByPackage = o -> XSSFWorkbookFactory.createWorkbook((OPCPackage)o);
WorkbookFactory.createXssfByFile = XSSFWorkbookFactory::createWorkbook;
}
-
/**
* Create a new empty Workbook
*
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org