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