Sorry for the repost... I'm resending because from my side it ~looks like~
the email below
never got sent to the mailing list.
Thanks for feedback, I'm looking forward to see if this patch can make it
into 2.2.5.
I've run all the test suite with it in against a local build from head as of
yesterday.
-- Langley
---------- Forwarded message ----------
From: John Langley <[email protected]>
Date: Wed, Feb 23, 2011 at 11:29 AM
Subject: patch for org.apache.jackrabbit.webdav.xmlDomUtil
To: [email protected]
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.