| /* |
| * Copyright (c) 2001-2004 World Wide Web Consortium, |
| * (Massachusetts Institute of Technology, Institut National de |
| * Recherche en Informatique et en Automatique, Keio University). All |
| * Rights Reserved. This program is distributed under the W3C's Software |
| * Intellectual Property License. This program is distributed in the |
| * hope that it will be useful, but WITHOUT ANY WARRANTY; without even |
| * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR |
| * PURPOSE. |
| * See W3C License http://www.w3.org/Consortium/Legal/ for more details. |
| */ |
| |
| /* |
| $Log: DOM4JTestDocumentBuilderFactory.java,v $ |
| Revision 1.2 2004/03/11 01:44:21 dom-ts-4 |
| Checkstyle fixes (bug 592) |
| |
| Revision 1.1 2002/02/03 07:47:51 dom-ts-4 |
| More missing files |
| |
| */ |
| |
| package org.w3c.domts; |
| |
| import java.lang.reflect.Constructor; |
| import java.lang.reflect.InvocationTargetException; |
| import java.lang.reflect.Method; |
| |
| import org.w3c.dom.DOMImplementation; |
| import org.w3c.dom.Document; |
| import org.xml.sax.XMLReader; |
| |
| /** |
| * This class implements the generic parser and configuation |
| * abstract class for JAXP supporting parsers. |
| */ |
| public class DOM4JTestDocumentBuilderFactory |
| extends DOMTestDocumentBuilderFactory { |
| |
| private final Object domFactory; |
| private final Object saxReader; |
| private final org.xml.sax.XMLReader xmlReader; |
| private org.w3c.dom.DOMImplementation domImpl; |
| private final Method readMethod; |
| |
| /** |
| * Creates a JAXP implementation of DOMTestDocumentBuilderFactory. |
| * @param factory null for default JAXP provider. If not null, |
| * factory will be mutated in constructor and should be released |
| * by calling code upon return. |
| * @param XMLReader if null use default XMLReader. If provided, |
| * it may be mutated and should be released by the caller immediately |
| * after the constructor. |
| * @param settings array of settings, may be null. |
| */ |
| public DOM4JTestDocumentBuilderFactory(DocumentBuilderSetting[] settings) throws |
| DOMTestIncompatibleException { |
| super(settings); |
| try { |
| // |
| // The following reflection code is trying to accomplish |
| // |
| //domFactory = org.dom4j.dom.DOMDocumentFactory.getInstance(); |
| //domImpl = (DOMImplementation) domFactory; |
| //saxReader = new org.dom4j.io.SAXReader(domFactory); |
| //xmlReader = saxReader.getXMLReader(); |
| |
| ClassLoader classLoader = ClassLoader.getSystemClassLoader(); |
| Class domFactoryClass = classLoader.loadClass( |
| "org.dom4j.dom.DOMDocumentFactory"); |
| Method getInstance = domFactoryClass.getMethod("getInstance", new Class[] {}); |
| domFactory = getInstance.invoke(null, new Object[] {}); |
| domImpl = (DOMImplementation) domFactory; |
| Class saxReaderClass = classLoader.loadClass("org.dom4j.io.SAXReader"); |
| Constructor saxReaderConstructor = saxReaderClass.getConstructor( |
| new Class[] {classLoader.loadClass("org.dom4j.DocumentFactory")}); |
| saxReader = saxReaderConstructor.newInstance(new Object[] {domFactory}); |
| |
| Method getReaderMethod = saxReaderClass.getMethod("getXMLReader", |
| new Class[] {}); |
| xmlReader = (XMLReader) getReaderMethod.invoke(saxReader, new Object[0]); |
| |
| readMethod = saxReaderClass.getMethod("read", new Class[] {java.net.URL.class}); |
| } |
| catch (InvocationTargetException ex) { |
| throw new DOMTestIncompatibleException(ex.getTargetException(), null); |
| } |
| catch (Exception ex) { |
| throw new DOMTestIncompatibleException(ex, null); |
| } |
| // |
| // TODO: Process settings |
| // |
| } |
| |
| public DOMTestDocumentBuilderFactory newInstance(DocumentBuilderSetting[] |
| newSettings) throws DOMTestIncompatibleException { |
| if (newSettings == null) { |
| return this; |
| } |
| DocumentBuilderSetting[] mergedSettings = mergeSettings(newSettings); |
| return new DOM4JTestDocumentBuilderFactory(mergedSettings); |
| } |
| |
| public Document load(java.net.URL url) throws DOMTestLoadException { |
| if (url == null) { |
| throw new NullPointerException("url"); |
| } |
| if (saxReader == null) { |
| throw new NullPointerException("saxReader"); |
| } |
| try { |
| return (org.w3c.dom.Document) readMethod.invoke(saxReader, |
| new Object[] {url}); |
| } |
| catch (InvocationTargetException ex) { |
| ex.getTargetException().printStackTrace(); |
| throw new DOMTestLoadException(ex.getTargetException()); |
| } |
| catch (Exception ex) { |
| ex.printStackTrace(); |
| throw new DOMTestLoadException(ex); |
| } |
| } |
| |
| public DOMImplementation getDOMImplementation() { |
| return domImpl; |
| } |
| |
| public boolean hasFeature(String feature, String version) { |
| return domImpl.hasFeature(feature, version); |
| } |
| |
| public boolean isCoalescing() { |
| return false; |
| } |
| |
| public boolean isExpandEntityReferences() { |
| return false; |
| } |
| |
| public boolean isIgnoringElementContentWhitespace() { |
| return false; |
| } |
| |
| public boolean isNamespaceAware() { |
| return true; |
| } |
| |
| public boolean isValidating() { |
| return false; |
| } |
| |
| } |