diff --git a/pom.xml b/pom.xml index 899ba60e..8c9b8aa9 100644 --- a/pom.xml +++ b/pom.xml @@ -36,7 +36,7 @@ 1.0.1 jcabi-xml - 1.0-SNAPSHOT + 0.7.2 jcabi-xml XML Parsing and Transforming diff --git a/src/main/java/com/jcabi/xml/XMLDocument.java b/src/main/java/com/jcabi/xml/XMLDocument.java index d7519404..0b408762 100644 --- a/src/main/java/com/jcabi/xml/XMLDocument.java +++ b/src/main/java/com/jcabi/xml/XMLDocument.java @@ -273,7 +273,10 @@ private XMLDocument(final Node node, final XPathContext ctx) { public String toString() { final StringWriter writer = new StringWriter(); try { - final Transformer trans = XMLDocument.TFACTORY.newTransformer(); + final Transformer trans; + synchronized (XMLDocument.class) { + trans = XMLDocument.TFACTORY.newTransformer(); + } // @checkstyle MultipleStringLiterals (1 line) trans.setOutputProperty(OutputKeys.INDENT, "yes"); trans.setOutputProperty(OutputKeys.VERSION, "1.0"); @@ -359,7 +362,10 @@ public XML merge(@NotNull(message = "context can't be NULL") private NodeList nodelist(final String query) { final NodeList nodes; try { - final XPath xpath = XMLDocument.XFACTORY.newXPath(); + final XPath xpath; + synchronized (XMLDocument.class) { + xpath = XMLDocument.XFACTORY.newXPath(); + } xpath.setNamespaceContext(this.context); nodes = (NodeList) xpath.evaluate( query, this.dom, XPathConstants.NODESET @@ -380,7 +386,11 @@ private NodeList nodelist(final String query) { private static Node transform(final Source source) { final DOMResult result = new DOMResult(); try { - XMLDocument.TFACTORY.newTransformer().transform(source, result); + final Transformer trans; + synchronized (XMLDocument.class) { + trans = XMLDocument.TFACTORY.newTransformer(); + } + trans.transform(source, result); } catch (TransformerConfigurationException ex) { throw new IllegalStateException(ex); } catch (TransformerException ex) { diff --git a/src/main/java/com/jcabi/xml/XSDDocument.java b/src/main/java/com/jcabi/xml/XSDDocument.java index f244744e..b6e7fd05 100644 --- a/src/main/java/com/jcabi/xml/XSDDocument.java +++ b/src/main/java/com/jcabi/xml/XSDDocument.java @@ -131,9 +131,11 @@ public Collection validate( @NotNull(message = "XML can't be NULL") final Source xml) { final Schema schema; try { - schema = SchemaFactory - .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI) - .newSchema(new StreamSource(new StringReader(this.xsd))); + synchronized (XSDDocument.class) { + schema = SchemaFactory + .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI) + .newSchema(new StreamSource(new StringReader(this.xsd))); + } } catch (SAXException ex) { throw new IllegalStateException( String.format("failed to create XSD schema from %s", this.xsd), diff --git a/src/main/java/com/jcabi/xml/XSLDocument.java b/src/main/java/com/jcabi/xml/XSLDocument.java index 098ffa36..9d9556ee 100644 --- a/src/main/java/com/jcabi/xml/XSLDocument.java +++ b/src/main/java/com/jcabi/xml/XSLDocument.java @@ -141,15 +141,20 @@ public XML transform(@NotNull(message = "XML can't be NULL") final XML xml) { final Transformer trans; try { - trans = XSLDocument.TFACTORY.newTransformer( - new StreamSource(new StringReader(this.xsl)) - ); + synchronized (XSLDocument.class) { + trans = XSLDocument.TFACTORY.newTransformer( + new StreamSource(new StringReader(this.xsl)) + ); + } } catch (TransformerConfigurationException ex) { throw new IllegalStateException(ex); } final Document target; try { - target = XSLDocument.DFACTORY.newDocumentBuilder().newDocument(); + synchronized (XSLDocument.class) { + target = XSLDocument.DFACTORY.newDocumentBuilder() + .newDocument(); + } } catch (ParserConfigurationException ex) { throw new IllegalStateException(ex); }