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