From 4a2273c3705f06f7a6fbfe4a87313beb8d7d67c0 Mon Sep 17 00:00:00 2001 From: Andreas Beeker Date: Sun, 2 Feb 2020 11:15:56 +0000 Subject: [PATCH] XSLF Performance - don't initialize the JAXBContext every time git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1873499 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/sl/draw/geom/PresetGeometries.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/java/org/apache/poi/sl/draw/geom/PresetGeometries.java b/src/java/org/apache/poi/sl/draw/geom/PresetGeometries.java index 98b2d58fa3..6b191bd544 100644 --- a/src/java/org/apache/poi/sl/draw/geom/PresetGeometries.java +++ b/src/java/org/apache/poi/sl/draw/geom/PresetGeometries.java @@ -38,12 +38,24 @@ import org.apache.poi.util.POILogger; import org.apache.poi.util.XMLHelper; /** - * + * */ public class PresetGeometries extends LinkedHashMap { private final static POILogger LOG = POILogFactory.getLogger(PresetGeometries.class); - protected final static String BINDING_PACKAGE = "org.apache.poi.sl.draw.binding"; - + private final static String BINDING_PACKAGE = "org.apache.poi.sl.draw.binding"; + + private static class SingletonHelper { + private static JAXBContext JAXB_CONTEXT; + static { + try { + JAXB_CONTEXT = JAXBContext.newInstance(BINDING_PACKAGE); + } catch (JAXBException e) { + throw new RuntimeException(e); + } + } + } + + protected static PresetGeometries _inst; protected PresetGeometries(){} @@ -57,7 +69,7 @@ public class PresetGeometries extends LinkedHashMap { streamReader.nextTag(); // JAXB: - JAXBContext jaxbContext = JAXBContext.newInstance(BINDING_PACKAGE); + JAXBContext jaxbContext = SingletonHelper.JAXB_CONTEXT; Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); long cntElem = 0; @@ -76,13 +88,13 @@ public class PresetGeometries extends LinkedHashMap { streamReader.close(); } } - + /** * Convert a single CustomGeometry object, i.e. from xmlbeans */ public static CustomGeometry convertCustomGeometry(XMLStreamReader staxReader) { try { - JAXBContext jaxbContext = JAXBContext.newInstance(BINDING_PACKAGE); + JAXBContext jaxbContext = SingletonHelper.JAXB_CONTEXT; Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); JAXBElement el = unmarshaller.unmarshal(staxReader, CTCustomGeometry2D.class); return new CustomGeometry(el.getValue());