1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// XMLReader.java - read an XML document. 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// http://www.saxproject.org 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// Written by David Megginson 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// NO WARRANTY! This class is in the Public Domain. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// $Id: XMLReader.java,v 1.9 2004/04/26 17:34:34 dmegginson Exp $ 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.xml.sax; 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Interface for reading an XML document using callbacks. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <blockquote> 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <em>This module, both source code and documentation, is in the 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em> 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a> 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * for further information. 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </blockquote> 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 22f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * <p><strong>Note:</strong> despite its name, this interface does 23f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * <em>not</em> extend the standard Java {@link java.io.Reader Reader} 24f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * interface, because reading XML is a fundamentally different activity 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * than reading character data.</p> 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>XMLReader is the interface that an XML parser's SAX2 driver must 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * implement. This interface allows an application to set and 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * query features and properties in the parser, to register 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * event handlers for document processing, and to initiate 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a document parse.</p> 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>All SAX interfaces are assumed to be synchronous: the 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link #parse parse} methods must not return until parsing 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is complete, and readers must wait for an event-handler callback 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to return before reporting the next event.</p> 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>This interface replaces the (now deprecated) SAX 1.0 {@link 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * org.xml.sax.Parser Parser} interface. The XMLReader interface 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contains two important enhancements over the old Parser 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * interface (as well as some minor ones):</p> 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ol> 44f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * <li>it adds a standard way to query and set features and 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * properties; and</li> 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>it adds Namespace support, which is required for many 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * higher-level XML standards.</li> 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ol> 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>There are adapters available to convert a SAX1 Parser to 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a SAX2 XMLReader and vice-versa.</p> 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @since SAX 2.0 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @author David Megginson 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @version 2.0.1+ (sax2r3pre1) 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see org.xml.sax.XMLFilter 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see org.xml.sax.helpers.ParserAdapter 58f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @see org.xml.sax.helpers.XMLReaderAdapter 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic interface XMLReader 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project{ 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //////////////////////////////////////////////////////////////////// 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Configuration. 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //////////////////////////////////////////////////////////////////// 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Look up the value of a feature flag. 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>The feature name is any fully-qualified URI. It is 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * possible for an XMLReader to recognize a feature name but 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * temporarily be unable to return its value. 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Some feature values may be available only in specific 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contexts, such as before, during, or after a parse. 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Also, some feature values may not be programmatically accessible. 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (In the case of an adapter for SAX1 {@link Parser}, there is no 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * implementation-independent way to expose whether the underlying 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * parser is performing validation, expanding external entities, 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and so forth.) </p> 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>All XMLReaders are required to recognize the 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://xml.org/sax/features/namespaces and the 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://xml.org/sax/features/namespace-prefixes feature names.</p> 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>Typical usage is something like this:</p> 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * XMLReader r = new MySAXDriver(); 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * // try to activate validation 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * try { 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * r.setFeature("http://xml.org/sax/features/validation", true); 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } catch (SAXException e) { 96f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * System.err.println("Cannot activate validation."); 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * // register event handlers 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * r.setContentHandler(new MyContentHandler()); 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * r.setErrorHandler(new MyErrorHandler()); 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * // parse the first document 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * try { 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * r.parse("http://www.foo.com/mydoc.xml"); 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } catch (IOException e) { 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * System.err.println("I/O exception reading XML document"); 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } catch (SAXException e) { 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * System.err.println("XML exception reading document."); 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>Implementors are free (and encouraged) to invent their own features, 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * using names built on their own URIs.</p> 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name The feature name, which is a fully-qualified URI. 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return The current value of the feature (true or false). 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception org.xml.sax.SAXNotRecognizedException If the feature 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value can't be assigned or retrieved. 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception org.xml.sax.SAXNotSupportedException When the 121f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * XMLReader recognizes the feature name but 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * cannot determine its value at this time. 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #setFeature 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean getFeature (String name) 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws SAXNotRecognizedException, SAXNotSupportedException; 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Set the value of a feature flag. 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>The feature name is any fully-qualified URI. It is 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * possible for an XMLReader to expose a feature value but 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to be unable to change the current value. 135f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Some feature values may be immutable or mutable only 136f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * in specific contexts, such as before, during, or after 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a parse.</p> 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>All XMLReaders are required to support setting 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://xml.org/sax/features/namespaces to true and 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://xml.org/sax/features/namespace-prefixes to false.</p> 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name The feature name, which is a fully-qualified URI. 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value The requested value of the feature (true or false). 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception org.xml.sax.SAXNotRecognizedException If the feature 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value can't be assigned or retrieved. 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception org.xml.sax.SAXNotSupportedException When the 148f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * XMLReader recognizes the feature name but 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * cannot set the requested value. 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #getFeature 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setFeature (String name, boolean value) 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws SAXNotRecognizedException, SAXNotSupportedException; 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Look up the value of a property. 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>The property name is any fully-qualified URI. It is 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * possible for an XMLReader to recognize a property name but 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * temporarily be unable to return its value. 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Some property values may be available only in specific 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contexts, such as before, during, or after a parse.</p> 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>XMLReaders are not required to recognize any specific 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * property names, though an initial core set is documented for 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * SAX2.</p> 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>Implementors are free (and encouraged) to invent their own properties, 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * using names built on their own URIs.</p> 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name The property name, which is a fully-qualified URI. 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return The current value of the property. 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception org.xml.sax.SAXNotRecognizedException If the property 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value can't be assigned or retrieved. 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception org.xml.sax.SAXNotSupportedException When the 177f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * XMLReader recognizes the property name but 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * cannot determine its value at this time. 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #setProperty 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object getProperty (String name) 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws SAXNotRecognizedException, SAXNotSupportedException; 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Set the value of a property. 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>The property name is any fully-qualified URI. It is 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * possible for an XMLReader to recognize a property name but 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to be unable to change the current value. 191f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Some property values may be immutable or mutable only 192f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * in specific contexts, such as before, during, or after 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a parse.</p> 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>XMLReaders are not required to recognize setting 196f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * any specific property names, though a core set is defined by 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * SAX2.</p> 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>This method is also the standard mechanism for setting 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * extended handlers.</p> 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name The property name, which is a fully-qualified URI. 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value The requested value for the property. 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception org.xml.sax.SAXNotRecognizedException If the property 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value can't be assigned or retrieved. 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception org.xml.sax.SAXNotSupportedException When the 207f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * XMLReader recognizes the property name but 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * cannot set the requested value. 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setProperty (String name, Object value) 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws SAXNotRecognizedException, SAXNotSupportedException; 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //////////////////////////////////////////////////////////////////// 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Event handlers. 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //////////////////////////////////////////////////////////////////// 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Allow an application to register an entity resolver. 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>If the application does not register an entity resolver, 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the XMLReader will perform its own default resolution.</p> 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>Applications may register a new or different resolver in the 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * middle of a parse, and the SAX parser must begin using the new 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * resolver immediately.</p> 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param resolver The entity resolver. 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #getEntityResolver 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setEntityResolver (EntityResolver resolver); 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Return the current entity resolver. 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return The current entity resolver, or null if none 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * has been registered. 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #setEntityResolver 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public EntityResolver getEntityResolver (); 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Allow an application to register a DTD event handler. 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>If the application does not register a DTD handler, all DTD 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * events reported by the SAX parser will be silently ignored.</p> 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>Applications may register a new or different handler in the 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * middle of a parse, and the SAX parser must begin using the new 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * handler immediately.</p> 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param handler The DTD handler. 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #getDTDHandler 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setDTDHandler (DTDHandler handler); 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Return the current DTD handler. 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return The current DTD handler, or null if none 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * has been registered. 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #setDTDHandler 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DTDHandler getDTDHandler (); 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Allow an application to register a content event handler. 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>If the application does not register a content handler, all 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * content events reported by the SAX parser will be silently 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ignored.</p> 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>Applications may register a new or different handler in the 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * middle of a parse, and the SAX parser must begin using the new 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * handler immediately.</p> 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param handler The content handler. 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #getContentHandler 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setContentHandler (ContentHandler handler); 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Return the current content handler. 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return The current content handler, or null if none 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * has been registered. 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #setContentHandler 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ContentHandler getContentHandler (); 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Allow an application to register an error event handler. 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>If the application does not register an error handler, all 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * error events reported by the SAX parser will be silently 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ignored; however, normal processing may not continue. It is 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * highly recommended that all SAX applications implement an 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * error handler to avoid unexpected bugs.</p> 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>Applications may register a new or different handler in the 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * middle of a parse, and the SAX parser must begin using the new 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * handler immediately.</p> 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param handler The error handler. 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #getErrorHandler 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setErrorHandler (ErrorHandler handler); 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Return the current error handler. 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return The current error handler, or null if none 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * has been registered. 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #setErrorHandler 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ErrorHandler getErrorHandler (); 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //////////////////////////////////////////////////////////////////// 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Parsing. 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //////////////////////////////////////////////////////////////////// 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parse an XML document. 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>The application can use this method to instruct the XML 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * reader to begin parsing an XML document from any valid input 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * source (a character stream, a byte stream, or a URI).</p> 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>Applications may not invoke this method while a parse is in 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * progress (they should create a new XMLReader instead for each 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * nested XML document). Once a parse is complete, an 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * application may reuse the same XMLReader object, possibly with a 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * different input source. 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Configuration of the XMLReader object (such as handler bindings and 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * values established for feature flags and properties) is unchanged 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * by completion of a parse, unless the definition of that aspect of 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the configuration explicitly specifies other behavior. 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (For example, feature flags or properties exposing 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * characteristics of the document being parsed.) 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </p> 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>During the parse, the XMLReader will provide information 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * about the XML document through the registered event 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * handlers.</p> 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>This method is synchronous: it will not return until parsing 358f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * has ended. If a client application wants to terminate 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * parsing early, it should throw an exception.</p> 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param input The input source for the top-level of the 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * XML document. 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception org.xml.sax.SAXException Any SAX exception, possibly 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * wrapping another exception. 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception java.io.IOException An IO exception from the parser, 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * possibly from a byte stream or character stream 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * supplied by the application. 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see org.xml.sax.InputSource 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #parse(java.lang.String) 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #setEntityResolver 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #setDTDHandler 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #setContentHandler 373f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @see #setErrorHandler 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void parse (InputSource input) 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IOException, SAXException; 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parse an XML document from a system identifier (URI). 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>This method is a shortcut for the common case of reading a 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * document from a system identifier. It is the exact 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * equivalent of the following:</p> 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * parse(new InputSource(systemId)); 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>If the system identifier is a URL, it must be fully resolved 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * by the application before it is passed to the parser.</p> 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param systemId The system identifier (URI). 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception org.xml.sax.SAXException Any SAX exception, possibly 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * wrapping another exception. 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception java.io.IOException An IO exception from the parser, 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * possibly from a byte stream or character stream 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * supplied by the application. 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #parse(org.xml.sax.InputSource) 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void parse (String systemId) 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IOException, SAXException; 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 405