mirror of https://github.com/apache/poi.git
Adjust init of PresetGeometries to not keep the object if static initialization fails
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1692898 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
7eb27ea492
commit
7501e761f6
|
@ -96,18 +96,23 @@ public class PresetGeometries extends LinkedHashMap<String, CustomGeometry> {
|
|||
|
||||
public static synchronized PresetGeometries getInstance(){
|
||||
if(_inst == null) {
|
||||
_inst = new PresetGeometries();
|
||||
// use a local object first to not assign a partly constructed object
|
||||
// in case of failure
|
||||
PresetGeometries lInst = new PresetGeometries();
|
||||
try {
|
||||
InputStream is = PresetGeometries.class.
|
||||
getResourceAsStream("presetShapeDefinitions.xml");
|
||||
_inst.init(is);
|
||||
is.close();
|
||||
try {
|
||||
lInst.init(is);
|
||||
} finally {
|
||||
is.close();
|
||||
}
|
||||
} catch (Exception e){
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
_inst = lInst;
|
||||
}
|
||||
|
||||
return _inst;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -18,11 +18,13 @@
|
|||
*/
|
||||
package org.apache.poi.sl.draw.geom;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.awt.geom.GeneralPath;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Test;
|
||||
|
@ -35,11 +37,9 @@ import org.junit.Test;
|
|||
public class TestPresetGeometries {
|
||||
@Test
|
||||
public void testRead(){
|
||||
|
||||
Map<String, CustomGeometry> shapes = PresetGeometries.getInstance();
|
||||
assertEquals(187, shapes.size());
|
||||
|
||||
|
||||
for(String name : shapes.keySet()) {
|
||||
CustomGeometry geom = shapes.get(name);
|
||||
Context ctx = new Context(geom, new Rectangle2D.Double(0, 0, 100, 100), new IAdjustableShape() {
|
||||
|
@ -52,8 +52,11 @@ public class TestPresetGeometries {
|
|||
assertNotNull(path);
|
||||
}
|
||||
}
|
||||
|
||||
// we get the same instance on further calls
|
||||
assertTrue(shapes == PresetGeometries.getInstance());
|
||||
}
|
||||
|
||||
|
||||
// helper methods to adjust list of presets for other tests
|
||||
public static void clearPreset() {
|
||||
// ensure that we are initialized
|
||||
|
@ -66,4 +69,24 @@ public class TestPresetGeometries {
|
|||
public static void resetPreset() {
|
||||
PresetGeometries._inst = null;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCheckXMLParser() throws Exception{
|
||||
// Gump reports a strange error because of an unavailable XML Parser, let's try to find out where
|
||||
// this comes from
|
||||
//
|
||||
Enumeration<URL> resources = this.getClass().getClassLoader().getResources("META-INF/services/javax.xml.stream.XMLEventFactory");
|
||||
printURLs(resources);
|
||||
resources = ClassLoader.getSystemResources("META-INF/services/javax.xml.stream.XMLEventFactory");
|
||||
printURLs(resources);
|
||||
resources = ClassLoader.getSystemResources("org/apache/poi/sl/draw/geom/presetShapeDefinitions.xml");
|
||||
printURLs(resources);
|
||||
}
|
||||
|
||||
private void printURLs(Enumeration<URL> resources) {
|
||||
while(resources.hasMoreElements()) {
|
||||
URL url = resources.nextElement();
|
||||
System.out.println("URL: " + url);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue