On 11/04/2011 12:41 PM, Caolán McNamara wrote:
i.e. com.sun.org.apache.xerces.internal.parsers.DOMParser is a sun/oracle-only java api. Commit http://cgit.freedesktop.org/libreoffice/core/commit/?id=04c5a36ab8d514cfbe8e40f4493787b2ab392ab5 (attached) I believe does the right thing, definitely builds anyway.
Looking at the patch, javax.xml.parsers.DocumentBuilderFactory.newInstance() smells like it internally uses the context class loader, even if that is not documented at <http://download.oracle.com/javase/7/docs/api/javax/xml/parsers/DocumentBuilderFactory.html#newInstance()> (and at least in some Sun JRE 6 it indeed does so), so this could fail if the context class loader is null---as can happen in LibO, see <https://issues.apache.org/ooo/show_bug.cgi?id=102164#c6>.
That is, the call to DocumentBuilderFactory.newInstance() within OfficeDocumentReportTarget would need to be wrapped in something like
DocumentBuilderFactory dbFactory; ClassLoader old = Thread.currentThread().getContextClassLoader(); ClassLoader c = OfficeDocumentReportTarget.class.getClassLoader(); if (c != null) { // otherwise, hope context class loader already contains a non-null value OfficeDocumentReportTarget.class.getClassLoader(c); } try { dbFactory = DocumentBuilderFactory.newInstance(); } finally { if (c != null) { Thread.currentThread().setContextClassLoader(old); } }
Stepha