Skip to content

Commit 2ae4e5d

Browse files
committed
Merge Hibernate Tools into ORM : Fix failing test on Oracle and Graal platforms
1 parent ac62e34 commit 2ae4e5d

File tree

1 file changed

+38
-3
lines changed

1 file changed

+38
-3
lines changed

tooling/hibernate-reveng/src/main/java/org/hibernate/tool/reveng/internal/xml/AbstractXMLPrettyPrinterStrategy.java

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@
2222

2323
public abstract class AbstractXMLPrettyPrinterStrategy implements XMLPrettyPrinterStrategy {
2424

25+
private static DocumentBuilderFactory documentBuilderFactory = null;
26+
2527
protected Document newDocument(String xml, String encoding) throws SAXException, IOException, ParserConfigurationException {
26-
final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
27-
dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
28-
final Document document = dbf
28+
final Document document = getDocumentBuilderFactory()
2929
.newDocumentBuilder()
3030
.parse(new InputSource(new ByteArrayInputStream(xml.getBytes(encoding))));
3131
document.normalize();
@@ -43,4 +43,39 @@ protected void removeWhitespace(final Document document) throws XPathExpressionE
4343
node.getParentNode().removeChild(node);
4444
}
4545
}
46+
47+
private static DocumentBuilderFactory getDocumentBuilderFactory() {
48+
if (documentBuilderFactory == null) {
49+
documentBuilderFactory = createDocumentBuilderFactory();
50+
}
51+
return documentBuilderFactory;
52+
}
53+
54+
private static DocumentBuilderFactory createDocumentBuilderFactory() {
55+
DocumentBuilderFactory result = null;
56+
// Save the documentBuilderFactoryClass and set it to the default jre version
57+
String documentBuilderFactoryClass = System.getProperty( "javax.xml.parsers.DocumentBuilderFactory" );
58+
System.setProperty(
59+
"javax.xml.parsers.DocumentBuilderFactory",
60+
"com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
61+
try {
62+
result = DocumentBuilderFactory.newInstance();
63+
result.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
64+
}
65+
catch (ParserConfigurationException e) {
66+
throw new RuntimeException(e);
67+
}
68+
finally {
69+
// Restore the documentBuilderFactory class
70+
if (documentBuilderFactoryClass != null) {
71+
System.setProperty(
72+
"javax.xml.parsers.DocumentBuilderFactory",
73+
documentBuilderFactoryClass );
74+
}
75+
else {
76+
System.clearProperty( "javax.xml.parsers.DocumentBuilderFactory" );
77+
}
78+
}
79+
return result;
80+
}
4681
}

0 commit comments

Comments
 (0)