@@ -114,7 +114,7 @@ public DefaultSafeXmlParserFactory() {
114114
115115 @ Override
116116 public DocumentBuilder createDocumentBuilderInstance (boolean namespaceAware , boolean ignoringComments ) {
117- DocumentBuilderFactory factory = XmlUtil . getDocumentBuilderFactory ();
117+ DocumentBuilderFactory factory = createDocumentBuilderFactory ();
118118 configureSafeDocumentBuilderFactory (factory );
119119 factory .setNamespaceAware (namespaceAware );
120120 factory .setIgnoringComments (ignoringComments );
@@ -130,7 +130,7 @@ public DocumentBuilder createDocumentBuilderInstance(boolean namespaceAware, boo
130130
131131 @ Override
132132 public XMLReader createXMLReaderInstance (boolean namespaceAware , boolean validating ) {
133- SAXParserFactory factory = XmlUtil . createSAXParserFactory ();
133+ SAXParserFactory factory = createSAXParserFactory ();
134134 factory .setNamespaceAware (namespaceAware );
135135 factory .setValidating (validating );
136136 configureSafeSAXParserFactory (factory );
@@ -145,7 +145,30 @@ public XMLReader createXMLReaderInstance(boolean namespaceAware, boolean validat
145145 return xmlReader ;
146146 }
147147
148- private void configureSafeDocumentBuilderFactory (DocumentBuilderFactory factory ) {
148+ /**
149+ * Creates a document builder factory implementation.
150+ *
151+ * @return result of {@link DocumentBuilderFactory#newInstance()} call
152+ */
153+ protected DocumentBuilderFactory createDocumentBuilderFactory () {
154+ return XmlUtil .getDocumentBuilderFactory ();
155+ }
156+
157+ /**
158+ * Creates a SAX parser factory implementation.
159+ *
160+ * @return result of {@link SAXParserFactory#newInstance()} call
161+ */
162+ protected SAXParserFactory createSAXParserFactory () {
163+ return XmlUtil .createSAXParserFactory ();
164+ }
165+
166+ /**
167+ * Configures document builder factory to make it secure against xml attacks.
168+ *
169+ * @param factory {@link DocumentBuilderFactory} instance to be configured
170+ */
171+ protected void configureSafeDocumentBuilderFactory (DocumentBuilderFactory factory ) {
149172 tryToSetFeature (factory , DISALLOW_DOCTYPE_DECL , true );
150173 tryToSetFeature (factory , EXTERNAL_GENERAL_ENTITIES , false );
151174 tryToSetFeature (factory , EXTERNAL_PARAMETER_ENTITIES , false );
@@ -155,7 +178,12 @@ private void configureSafeDocumentBuilderFactory(DocumentBuilderFactory factory)
155178 factory .setExpandEntityReferences (false );
156179 }
157180
158- private void configureSafeSAXParserFactory (SAXParserFactory factory ) {
181+ /**
182+ * Configures SAX parser factory to make it secure against xml attacks.
183+ *
184+ * @param factory {@link SAXParserFactory} instance to be configured
185+ */
186+ protected void configureSafeSAXParserFactory (SAXParserFactory factory ) {
159187 tryToSetFeature (factory , DISALLOW_DOCTYPE_DECL , true );
160188 tryToSetFeature (factory , EXTERNAL_GENERAL_ENTITIES , false );
161189 tryToSetFeature (factory , EXTERNAL_PARAMETER_ENTITIES , false );
0 commit comments