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
This commit is contained in:
Andreas Beeker 2020-02-02 11:15:56 +00:00
parent 9bb5bce5f6
commit 4a2273c370
1 changed files with 18 additions and 6 deletions

View File

@ -38,12 +38,24 @@ import org.apache.poi.util.POILogger;
import org.apache.poi.util.XMLHelper; import org.apache.poi.util.XMLHelper;
/** /**
* *
*/ */
public class PresetGeometries extends LinkedHashMap<String, CustomGeometry> { public class PresetGeometries extends LinkedHashMap<String, CustomGeometry> {
private final static POILogger LOG = POILogFactory.getLogger(PresetGeometries.class); 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 static PresetGeometries _inst;
protected PresetGeometries(){} protected PresetGeometries(){}
@ -57,7 +69,7 @@ public class PresetGeometries extends LinkedHashMap<String, CustomGeometry> {
streamReader.nextTag(); streamReader.nextTag();
// JAXB: // JAXB:
JAXBContext jaxbContext = JAXBContext.newInstance(BINDING_PACKAGE); JAXBContext jaxbContext = SingletonHelper.JAXB_CONTEXT;
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
long cntElem = 0; long cntElem = 0;
@ -76,13 +88,13 @@ public class PresetGeometries extends LinkedHashMap<String, CustomGeometry> {
streamReader.close(); streamReader.close();
} }
} }
/** /**
* Convert a single CustomGeometry object, i.e. from xmlbeans * Convert a single CustomGeometry object, i.e. from xmlbeans
*/ */
public static CustomGeometry convertCustomGeometry(XMLStreamReader staxReader) { public static CustomGeometry convertCustomGeometry(XMLStreamReader staxReader) {
try { try {
JAXBContext jaxbContext = JAXBContext.newInstance(BINDING_PACKAGE); JAXBContext jaxbContext = SingletonHelper.JAXB_CONTEXT;
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
JAXBElement<CTCustomGeometry2D> el = unmarshaller.unmarshal(staxReader, CTCustomGeometry2D.class); JAXBElement<CTCustomGeometry2D> el = unmarshaller.unmarshal(staxReader, CTCustomGeometry2D.class);
return new CustomGeometry(el.getValue()); return new CustomGeometry(el.getValue());