]> source.dussan.org Git - poi.git/commitdiff
#64036 - Replace reflection calls in factories for Java 9+
authorAndreas Beeker <kiwiwings@apache.org>
Sun, 16 Aug 2020 23:18:19 +0000 (23:18 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Sun, 16 Aug 2020 23:18:19 +0000 (23:18 +0000)
ImageRenderer implementation are now loaded via ServiceLoader
fixed the ServiceLoader.load invocations to pass a sensible ClassLoader as OSGi preparation

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1880909 13f79535-47bb-0310-9956-ffa450edef68

20 files changed:
src/java/org/apache/poi/extractor/ExtractorFactory.java
src/java/org/apache/poi/sl/draw/ImageRenderer.java
src/java/org/apache/poi/sl/usermodel/SlideShowFactory.java
src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java
src/multimodule/ooxml/java9/module-info.class
src/multimodule/ooxml/java9/module-info.java
src/multimodule/ooxml/test9/module-info.class
src/multimodule/ooxml/test9/module-info.java
src/multimodule/poi/java9/module-info.class
src/multimodule/poi/java9/module-info.java
src/multimodule/poi/test9/module-info.class
src/multimodule/poi/test9/module-info.java
src/multimodule/scratchpad/java9/module-info.class
src/multimodule/scratchpad/java9/module-info.java
src/multimodule/scratchpad/test9/module-info.class
src/multimodule/scratchpad/test9/module-info.java
src/resources/devtools/forbidden-signatures.txt
src/resources/main/META-INF/services/org.apache.poi.sl.draw.ImageRenderer [new file with mode: 0644]
src/resources/ooxml/META-INF/services/org.apache.poi.sl.draw.ImageRenderer [new file with mode: 0644]
src/resources/scratchpad/META-INF/services/org.apache.poi.sl.draw.ImageRenderer [new file with mode: 0644]

index bdeb740e20c8dc09f172db253db94332106d5a00..ccab16a213bc1f261b6a0ce8a588a6d4b1c32d8a 100644 (file)
@@ -81,7 +81,8 @@ public final class ExtractorFactory {
 
 
     private ExtractorFactory() {
-        ServiceLoader.load(ExtractorProvider.class).forEach(provider::add);
+        ClassLoader cl = ExtractorFactory.class.getClassLoader();
+        ServiceLoader.load(ExtractorProvider.class, cl).forEach(provider::add);
     }
 
     /**
index 0289fce7bf6944a0af0327df9e6ad40d93e25ca9..5051d4593b483ff9a5ba69a154a81365e771e059 100644 (file)
@@ -31,7 +31,8 @@ import org.apache.poi.util.Dimension2DDouble;
 
 /**
  * Classes can implement this interfaces to support other formats, for
- * example, use Apache Batik to render WMF, PICT can be rendered using Apple QuickTime API for Java:
+ * example, use Apache Batik to render WMF (since POI 4.0, there's an internal WMF/EMF/EMF+ renderer in POI),
+ * PICT can be rendered using Apple QuickTime API for Java:
  *
  * <pre>
  * <code>
@@ -132,11 +133,11 @@ public interface ImageRenderer {
     /**
      * @param dim the dimension in pixels of the returned image
      * @return the image as buffered image or null if image could not be loaded
-     * 
+     *
      * @since POI 3.15-beta2
      */
     BufferedImage getImage(Dimension2D dim);
-    
+
     /**
      * Render picture data into the supplied graphics
      *
index 200120b2115297ce6e6b70cdfc207bdf917effd0..8155fccb8daf029b87f48c9478f053d799c37f53 100644 (file)
@@ -48,7 +48,8 @@ public final class SlideShowFactory {
     private final List<SlideShowProvider<?,?>> provider = new ArrayList<>();
 
     private SlideShowFactory() {
-        ServiceLoader.load(SlideShowProvider.class).forEach(provider::add);
+        ClassLoader cl = SlideShowFactory.class.getClassLoader();
+        ServiceLoader.load(SlideShowProvider.class, cl).forEach(provider::add);
     }
 
     /**
index e755b09f5e97148d0331818a846cdaf7d9b28303..965666904cb8199dab64b45aaf86aab9d03279f4 100644 (file)
@@ -54,7 +54,8 @@ public final class WorkbookFactory {
     private final List<WorkbookProvider> provider = new ArrayList<>();
 
     private WorkbookFactory() {
-        ServiceLoader.load(WorkbookProvider.class).forEach(provider::add);
+        ClassLoader cl = WorkbookFactory.class.getClassLoader();
+        ServiceLoader.load(WorkbookProvider.class, cl).forEach(provider::add);
     }
 
 
index 517b8bbe2c795ea4aaa15af69477f66ea30d1e4d..fd59cc5611206d7993ce890192192f4543747133 100644 (file)
Binary files a/src/multimodule/ooxml/java9/module-info.class and b/src/multimodule/ooxml/java9/module-info.class differ
index 66928ffa24e605ba66bd2086168cd35e22b8fd3a..35533ce078d56365844d186a926801582e9e30c4 100644 (file)
@@ -31,6 +31,7 @@ module org.apache.poi.ooxml {
     provides org.apache.poi.extractor.ExtractorProvider with org.apache.poi.ooxml.extractor.POIXMLExtractorFactory;
     provides org.apache.poi.ss.usermodel.WorkbookProvider with org.apache.poi.xssf.usermodel.XSSFWorkbookFactory;
     provides org.apache.poi.sl.usermodel.SlideShowProvider with org.apache.poi.xslf.usermodel.XSLFSlideShowFactory;
+    provides org.apache.poi.sl.draw.ImageRenderer with org.apache.poi.xslf.draw.SVGImageRenderer;
 
     exports org.apache.poi.xwpf.extractor;
     exports org.apache.poi.xwpf.usermodel;
index be87166834c83e09dd5b6d7b7db577c119f6e059..67874cc31c85a50cfa91d0a2c4789cae5cfee30d 100644 (file)
Binary files a/src/multimodule/ooxml/test9/module-info.class and b/src/multimodule/ooxml/test9/module-info.class differ
index b41ae2b9b631409e96043114d42b7c540efa058c..6ae5b6cd84783fa87424650a59f0349fcb61a785 100644 (file)
@@ -31,6 +31,7 @@ module org.apache.poi.ooxml {
     provides org.apache.poi.extractor.ExtractorProvider with org.apache.poi.ooxml.extractor.POIXMLExtractorFactory;
     provides org.apache.poi.ss.usermodel.WorkbookProvider with org.apache.poi.xssf.usermodel.XSSFWorkbookFactory;
     provides org.apache.poi.sl.usermodel.SlideShowProvider with org.apache.poi.xslf.usermodel.XSLFSlideShowFactory;
+    provides org.apache.poi.sl.draw.ImageRenderer with org.apache.poi.xslf.draw.SVGImageRenderer;
 
     exports org.apache.poi.xwpf.extractor;
     exports org.apache.poi.xwpf.usermodel;
index ab0e08c35869c28e8b35ad17b2b274bf76026c93..c0a0ef367afb5f32a2dea04137826a592b8470c6 100644 (file)
Binary files a/src/multimodule/poi/java9/module-info.class and b/src/multimodule/poi/java9/module-info.class differ
index ea3f394035aa0f9e0d55e721ab265fba20a8ff15..a34988980b6a902445754764b595a243056572ea 100644 (file)
@@ -27,14 +27,15 @@ module org.apache.poi.poi {
     /* needed for CleanerUtil */
     requires jdk.unsupported;
 
+    /* for JPMS / OSGi interaction see https://blog.osgi.org/2013/02/javautilserviceloader-in-osgi.html */
     uses org.apache.poi.extractor.ExtractorProvider;
     uses org.apache.poi.ss.usermodel.WorkbookProvider;
     uses org.apache.poi.sl.usermodel.SlideShowProvider;
+    uses org.apache.poi.sl.draw.ImageRenderer;
 
-
-    provides org.apache.poi.ss.usermodel.WorkbookProvider with org.apache.poi.hssf.usermodel.HSSFWorkbookFactory;
     provides org.apache.poi.extractor.ExtractorProvider with org.apache.poi.extractor.MainExtractorFactory;
-
+    provides org.apache.poi.ss.usermodel.WorkbookProvider with org.apache.poi.hssf.usermodel.HSSFWorkbookFactory;
+    provides org.apache.poi.sl.draw.ImageRenderer with org.apache.poi.sl.draw.BitmapImageRenderer;
 
     exports org.apache.poi;
     exports org.apache.poi.common;
index 2b43c43fa8d263524cb541d0084236d6e298d98f..d3bfb0afd1601487e4af28268fc6ba0925dcb3ee 100644 (file)
Binary files a/src/multimodule/poi/test9/module-info.class and b/src/multimodule/poi/test9/module-info.class differ
index 9e5bc0a110855c4d05c94006ab7120f30fc99d21..79a6a70c2e9921ba178399643e00383d53fd5e5e 100644 (file)
@@ -27,12 +27,15 @@ module org.apache.poi.poi {
     /* needed for CleanerUtil */
     requires jdk.unsupported;
 
+    /* for JPMS / OSGi interaction see https://blog.osgi.org/2013/02/javautilserviceloader-in-osgi.html */
     uses org.apache.poi.extractor.ExtractorProvider;
     uses org.apache.poi.ss.usermodel.WorkbookProvider;
     uses org.apache.poi.sl.usermodel.SlideShowProvider;
+    uses org.apache.poi.sl.draw.ImageRenderer;
 
-    provides org.apache.poi.ss.usermodel.WorkbookProvider with org.apache.poi.hssf.usermodel.HSSFWorkbookFactory;
     provides org.apache.poi.extractor.ExtractorProvider with org.apache.poi.extractor.MainExtractorFactory;
+    provides org.apache.poi.ss.usermodel.WorkbookProvider with org.apache.poi.hssf.usermodel.HSSFWorkbookFactory;
+    provides org.apache.poi.sl.draw.ImageRenderer with org.apache.poi.sl.draw.BitmapImageRenderer;
 
     exports org.apache.poi;
     exports org.apache.poi.common;
index 8697888d28aa9f0160a173630b34b8024aae7e40..a32c3eac271f39e3a07d31fb6ec5ac225619133a 100644 (file)
Binary files a/src/multimodule/scratchpad/java9/module-info.class and b/src/multimodule/scratchpad/java9/module-info.class differ
index b936858c707173be68f9ebb7dbd68a213f903c97..658ef8652b73669f43dd91cd39b251afe77f8df0 100644 (file)
@@ -22,6 +22,7 @@ module org.apache.poi.scratchpad {
 
     provides org.apache.poi.extractor.ExtractorProvider with org.apache.poi.extractor.ole2.OLE2ScratchpadExtractorFactory;
     provides org.apache.poi.sl.usermodel.SlideShowProvider with org.apache.poi.hslf.usermodel.HSLFSlideShowFactory;
+    provides org.apache.poi.sl.draw.ImageRenderer with org.apache.poi.hwmf.draw.HwmfImageRenderer, org.apache.poi.hemf.draw.HemfImageRenderer;
 
     exports org.apache.poi.hmef;
     exports org.apache.poi.hmef.dev;
index 4ee1e56a657302645cc8efca30f6ca4d0a5e5f84..cfda7bb49527ea644a890b9504f41002075dc286 100644 (file)
Binary files a/src/multimodule/scratchpad/test9/module-info.class and b/src/multimodule/scratchpad/test9/module-info.class differ
index cb0691b9a1267a079a649ce421942707ea21e0eb..9d406fd36e328d96ca3f0a8dedc184b204ffe5a7 100644 (file)
@@ -22,6 +22,7 @@ module org.apache.poi.scratchpad {
 
     provides org.apache.poi.extractor.ExtractorProvider with org.apache.poi.extractor.ole2.OLE2ScratchpadExtractorFactory;
     provides org.apache.poi.sl.usermodel.SlideShowProvider with org.apache.poi.hslf.usermodel.HSLFSlideShowFactory;
+    provides org.apache.poi.sl.draw.ImageRenderer with org.apache.poi.hwmf.draw.HwmfImageRenderer, org.apache.poi.hemf.draw.HemfImageRenderer;
 
     exports org.apache.poi.hmef;
     exports org.apache.poi.hmef.dev;
index facc47035faa7f4cab8031b03620af9e878cb741..dbe56c1022d9998c0c6ed2ca76566d04bb01bff2 100644 (file)
@@ -136,4 +136,7 @@ java.lang.String#toString()
 #java.util.Hashtable\r
 \r
 @defaultMessage DatatypeConverter is not available in Java 9+ without adding add-opens - use java.util.Base64\r
-javax.xml.bind.DatatypeConverter
\ No newline at end of file
+javax.xml.bind.DatatypeConverter\r
+\r
+@defaultMessage don't rely on the threads ContextClassLoader - provide the classloader via load(Class, Classloader)\r
+java.util.ServiceLoader#load(java.lang.Class)
\ No newline at end of file
diff --git a/src/resources/main/META-INF/services/org.apache.poi.sl.draw.ImageRenderer b/src/resources/main/META-INF/services/org.apache.poi.sl.draw.ImageRenderer
new file mode 100644 (file)
index 0000000..a911eb6
--- /dev/null
@@ -0,0 +1,18 @@
+# ====================================================================
+#  Licensed to the Apache Software Foundation (ASF) under one or more
+#  contributor license agreements.  See the NOTICE file distributed with
+#  this work for additional information regarding copyright ownership.
+#  The ASF licenses this file to You under the Apache License, Version 2.0
+#  (the "License"); you may not use this file except in compliance with
+#  the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+# ====================================================================
+
+org.apache.poi.sl.draw.BitmapImageRenderer
\ No newline at end of file
diff --git a/src/resources/ooxml/META-INF/services/org.apache.poi.sl.draw.ImageRenderer b/src/resources/ooxml/META-INF/services/org.apache.poi.sl.draw.ImageRenderer
new file mode 100644 (file)
index 0000000..f5f7bb9
--- /dev/null
@@ -0,0 +1,18 @@
+# ====================================================================
+#  Licensed to the Apache Software Foundation (ASF) under one or more
+#  contributor license agreements.  See the NOTICE file distributed with
+#  this work for additional information regarding copyright ownership.
+#  The ASF licenses this file to You under the Apache License, Version 2.0
+#  (the "License"); you may not use this file except in compliance with
+#  the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+# ====================================================================
+
+org.apache.poi.xslf.draw.SVGImageRenderer
\ No newline at end of file
diff --git a/src/resources/scratchpad/META-INF/services/org.apache.poi.sl.draw.ImageRenderer b/src/resources/scratchpad/META-INF/services/org.apache.poi.sl.draw.ImageRenderer
new file mode 100644 (file)
index 0000000..c3149c3
--- /dev/null
@@ -0,0 +1,19 @@
+# ====================================================================
+#  Licensed to the Apache Software Foundation (ASF) under one or more
+#  contributor license agreements.  See the NOTICE file distributed with
+#  this work for additional information regarding copyright ownership.
+#  The ASF licenses this file to You under the Apache License, Version 2.0
+#  (the "License"); you may not use this file except in compliance with
+#  the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+# ====================================================================
+
+org.apache.poi.hwmf.draw.HwmfImageRenderer
+org.apache.poi.hemf.draw.HemfImageRenderer