This is an automated email from the ASF dual-hosted git repository. rmannibucau pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/aries-cdi.git
commit 08ebf6c474f1ec1d99fd8bed38b461c8b7806b0b Author: Romain Manni-Bucau <rmannibu...@gmail.com> AuthorDate: Fri Oct 30 09:40:31 2020 +0100 [ARIES-2018] don't create document builder and xpath if no beans.xml is seen --- .../container/internal/container/Discovery.java | 37 ++++++++++++---------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Discovery.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Discovery.java index 96e68ce..709d46b 100644 --- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Discovery.java +++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/Discovery.java @@ -88,21 +88,23 @@ public class Discovery { private static final List<Type> BIND_TYPES = Arrays.asList(BindService.class, BindBeanServiceObjects.class, BindServiceReference.class); - static final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - static final XPathFactory xpf = XPathFactory.newInstance(); - static final XPathExpression trimExpression; - static final XPathExpression excludeExpression; + private static final class LazyXml { // when not needed, don't create that + static final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + static final XPathFactory xpf = XPathFactory.newInstance(); + static final XPathExpression trimExpression; + static final XPathExpression excludeExpression; - static { - try { - dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); - dbf.setXIncludeAware(false); - dbf.setExpandEntityReferences(false); - XPath xPath = xpf.newXPath(); - trimExpression = xPath.compile("boolean(/beans/trim)"); - excludeExpression = xPath.compile("/beans/scan/exclude"); - } catch (Throwable t) { - throw Exceptions.duck(t); + static { + try { + dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + dbf.setXIncludeAware(false); + dbf.setExpandEntityReferences(false); + XPath xPath = xpf.newXPath(); + trimExpression = xPath.compile("boolean(/beans/trim)"); + excludeExpression = xPath.compile("/beans/scan/exclude"); + } catch (Throwable t) { + throw Exceptions.duck(t); + } } } @@ -460,7 +462,7 @@ public class Discovery { boolean checkTrim(Document document) { try { - return Boolean.class.cast(trimExpression.evaluate(document, XPathConstants.BOOLEAN)); + return Boolean.class.cast(LazyXml.trimExpression.evaluate(document, XPathConstants.BOOLEAN)); } catch (XPathExpressionException e) { throw Exceptions.duck(e); } @@ -470,7 +472,8 @@ public class Discovery { try { List<Exclude> excludes = new ArrayList<>(); - NodeList excludeNodes = NodeList.class.cast(excludeExpression.evaluate(document, XPathConstants.NODESET)); + NodeList excludeNodes = NodeList.class.cast( + LazyXml.excludeExpression.evaluate(document, XPathConstants.NODESET)); for (int i = 0; i < excludeNodes.getLength(); i++) { Element excludeElement = (Element)excludeNodes.item(i); @@ -487,7 +490,7 @@ public class Discovery { Document readXMLResource(URL resource) { try { - DocumentBuilder db = dbf.newDocumentBuilder(); + DocumentBuilder db = LazyXml.dbf.newDocumentBuilder(); try (InputStream is = resource.openStream()) { return db.parse(is); } catch (Throwable t) {