1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (c) 2001-2004 World Wide Web Consortium, 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (Massachusetts Institute of Technology, Institut National de 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Recherche en Informatique et en Automatique, Keio University). All 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Rights Reserved. This program is distributed under the W3C's Software 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Intellectual Property License. This program is distributed in the 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * hope that it will be useful, but WITHOUT ANY WARRANTY; without even 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * PURPOSE. 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See W3C License http://www.w3.org/Consortium/Legal/ for more details. 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project $Log: DOM4JTestDocumentBuilderFactory.java,v $ 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Revision 1.2 2004/03/11 01:44:21 dom-ts-4 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Checkstyle fixes (bug 592) 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Revision 1.1 2002/02/03 07:47:51 dom-ts-4 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project More missing files 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.w3c.domts; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.Constructor; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.InvocationTargetException; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.Method; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.DOMImplementation; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.Document; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.XMLReader; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This class implements the generic parser and configuation 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * abstract class for JAXP supporting parsers. 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class DOM4JTestDocumentBuilderFactory 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project extends DOMTestDocumentBuilderFactory { 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final Object domFactory; 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final Object saxReader; 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final org.xml.sax.XMLReader xmlReader; 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private org.w3c.dom.DOMImplementation domImpl; 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final Method readMethod; 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a JAXP implementation of DOMTestDocumentBuilderFactory. 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param factory null for default JAXP provider. If not null, 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * factory will be mutated in constructor and should be released 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * by calling code upon return. 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param XMLReader if null use default XMLReader. If provided, 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * it may be mutated and should be released by the caller immediately 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * after the constructor. 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param settings array of settings, may be null. 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DOM4JTestDocumentBuilderFactory(DocumentBuilderSetting[] settings) throws 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DOMTestIncompatibleException { 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(settings); 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The following reflection code is trying to accomplish 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //domFactory = org.dom4j.dom.DOMDocumentFactory.getInstance(); 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //domImpl = (DOMImplementation) domFactory; 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //saxReader = new org.dom4j.io.SAXReader(domFactory); 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //xmlReader = saxReader.getXMLReader(); 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ClassLoader classLoader = ClassLoader.getSystemClassLoader(); 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class domFactoryClass = classLoader.loadClass( 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "org.dom4j.dom.DOMDocumentFactory"); 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Method getInstance = domFactoryClass.getMethod("getInstance", new Class[] {}); 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project domFactory = getInstance.invoke(null, new Object[] {}); 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project domImpl = (DOMImplementation) domFactory; 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class saxReaderClass = classLoader.loadClass("org.dom4j.io.SAXReader"); 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Constructor saxReaderConstructor = saxReaderClass.getConstructor( 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new Class[] {classLoader.loadClass("org.dom4j.DocumentFactory")}); 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project saxReader = saxReaderConstructor.newInstance(new Object[] {domFactory}); 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Method getReaderMethod = saxReaderClass.getMethod("getXMLReader", 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new Class[] {}); 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project xmlReader = (XMLReader) getReaderMethod.invoke(saxReader, new Object[0]); 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project readMethod = saxReaderClass.getMethod("read", new Class[] {java.net.URL.class}); 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project catch (InvocationTargetException ex) { 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new DOMTestIncompatibleException(ex.getTargetException(), null); 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project catch (Exception ex) { 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new DOMTestIncompatibleException(ex, null); 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // TODO: Process settings 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DOMTestDocumentBuilderFactory newInstance(DocumentBuilderSetting[] 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project newSettings) throws DOMTestIncompatibleException { 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (newSettings == null) { 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DocumentBuilderSetting[] mergedSettings = mergeSettings(newSettings); 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new DOM4JTestDocumentBuilderFactory(mergedSettings); 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Document load(java.net.URL url) throws DOMTestLoadException { 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (url == null) { 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new NullPointerException("url"); 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (saxReader == null) { 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new NullPointerException("saxReader"); 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (org.w3c.dom.Document) readMethod.invoke(saxReader, 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new Object[] {url}); 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project catch (InvocationTargetException ex) { 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ex.getTargetException().printStackTrace(); 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new DOMTestLoadException(ex.getTargetException()); 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project catch (Exception ex) { 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ex.printStackTrace(); 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new DOMTestLoadException(ex); 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DOMImplementation getDOMImplementation() { 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return domImpl; 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean hasFeature(String feature, String version) { 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return domImpl.hasFeature(feature, version); 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isCoalescing() { 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isExpandEntityReferences() { 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isIgnoringElementContentWhitespace() { 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isNamespaceAware() { 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isValidating() { 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 155