Attached is a patch I'd like to propose for DomUtils.java
It does two things.
1) it adds a "catch" for an exception that can occur when xerces is on your
classpath and the createFactory() method runs (at init time). Apparently the
xerces version of DocumentBuilderFactory doesn't support this method.
2) it adds a method that allows us to inject a customized version of the
DocumentBuilderFactory. You may want to inject a DocumentBuilderFactory if
you want to make have a local catalog resolver used for xml validation. In
practice we use this technique to address this issue:
http://www.w3.org/blog/systeam/2008/02/08/w3c_s_excessive_dtd_traffic

I'd love feedback by a commiter if something needs to be changed and then it
would be great if someone would submit it for me.

Thanks

-- Langley
Index: jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/DomUtil.java
===================================================================
--- jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/DomUtil.java	(revision 1073378)
+++ jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/DomUtil.java	(working copy)
@@ -63,9 +63,23 @@
             factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
         } catch (ParserConfigurationException e) {
             log.warn("Secure XML processing is not supported", e);
+        } catch (AbstractMethodError ame) {  
+            log.warn("Secure XML processing is not supported", ame);
         }
         return factory;
     }
+    
+    
+    /**
+     * Support the replacement of the BUILDER_FACTORY. This is useful for injecting 
+     * a customized BuilderFactory, for example with one that uses 
+     * a local catalog resolver. This is one technique for addressing this issue:
+     * http://www.w3.org/blog/systeam/2008/02/08/w3c_s_excessive_dtd_traffic
+     * @param documentBuilderFactory
+     */
+    public  static void setBuilderFactory(DocumentBuilderFactory documentBuilderFactory) { 
+    	BUILDER_FACTORY = documentBuilderFactory; 
+    }
 
     /**
      * Creates and returns a new empty DOM document.

Reply via email to