39
39
public class DomDriver extends AbstractXmlDriver {
40
40
41
41
private final String encoding ;
42
- private final DocumentBuilderFactory documentBuilderFactory ;
42
+ private DocumentBuilderFactory documentBuilderFactory ;
43
43
44
44
/**
45
45
* Construct a DomDriver.
@@ -62,12 +62,6 @@ public DomDriver(final String encoding) {
62
62
public DomDriver (final String encoding , final NameCoder nameCoder ) {
63
63
super (nameCoder );
64
64
this .encoding = encoding ;
65
- documentBuilderFactory = DocumentBuilderFactory .newInstance ();
66
- try {
67
- documentBuilderFactory .setFeature ("http://apache.org/xml/features/disallow-doctype-decl" , true );
68
- } catch (final ParserConfigurationException e ) {
69
- throw new StreamException (e );
70
- }
71
65
}
72
66
73
67
/**
@@ -101,6 +95,13 @@ public HierarchicalStreamReader createReader(final File in) {
101
95
102
96
private HierarchicalStreamReader createReader (final InputSource source ) {
103
97
try {
98
+ if (documentBuilderFactory == null ) {
99
+ synchronized (this ) {
100
+ if (documentBuilderFactory == null ) {
101
+ documentBuilderFactory = createDocumentBuilderFactory ();
102
+ }
103
+ }
104
+ }
104
105
final DocumentBuilder documentBuilder = documentBuilderFactory .newDocumentBuilder ();
105
106
if (encoding != null ) {
106
107
source .setEncoding (encoding );
@@ -131,4 +132,20 @@ public HierarchicalStreamWriter createWriter(final OutputStream out) {
131
132
throw new StreamException (e );
132
133
}
133
134
}
135
+
136
+ /**
137
+ * Create the DocumentBuilderFactory instance.
138
+ *
139
+ * @return the new instance
140
+ * @since upcoming
141
+ */
142
+ protected DocumentBuilderFactory createDocumentBuilderFactory () {
143
+ final DocumentBuilderFactory factory = DocumentBuilderFactory .newInstance ();
144
+ try {
145
+ factory .setFeature ("http://apache.org/xml/features/disallow-doctype-decl" , true );
146
+ } catch (final ParserConfigurationException e ) {
147
+ throw new StreamException (e );
148
+ }
149
+ return factory ;
150
+ }
134
151
}
0 commit comments