Skip to content

Commit 42926d0

Browse files
committed
Merge Hibernate Tools into ORM : Fix failing test on Oracle and Graal platforms
1 parent ebf3738 commit 42926d0

File tree

1 file changed

+34
-3
lines changed

1 file changed

+34
-3
lines changed

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

Lines changed: 34 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,35 @@ 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+
{
67+
throw new RuntimeException(e);
68+
}
69+
finally {
70+
// Restore the documentBuilderFactory class
71+
System.setProperty(
72+
"javax.xml.parsers.DocumentBuilderFactory",
73+
documentBuilderFactoryClass);
74+
}
75+
return result;
76+
}
4677
}

0 commit comments

Comments
 (0)