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:
Dominik Stadler 2015-07-27 15:39:34 +00:00
parent 7eb27ea492
commit 7501e761f6
2 changed files with 37 additions and 9 deletions

View File

@ -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;
}
}

View File

@ -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);
}
}
}