1320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson/* 2320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one or more 3320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * contributor license agreements. See the NOTICE file distributed with 4320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * this work for additional information regarding copyright ownership. 5320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * The ASF licenses this file to You under the Apache License, Version 2.0 6320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * (the "License"); you may not use this file except in compliance with 7320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * the License. You may obtain a copy of the License at 8320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 9320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 10320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 11320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Unless required by applicable law or agreed to in writing, software 12320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 13320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * See the License for the specific language governing permissions and 15320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * limitations under the License. 16320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 17320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson// $Id: Validator.java 888884 2009-12-09 17:36:46Z mrglavas $ 18320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 19320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonpackage javax.xml.validation; 20320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 21320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonimport java.io.IOException; 22320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonimport javax.xml.transform.Result; 23320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonimport javax.xml.transform.Source; 24320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonimport org.w3c.dom.ls.LSResourceResolver; 25320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonimport org.xml.sax.ErrorHandler; 26320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonimport org.xml.sax.SAXException; 27320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonimport org.xml.sax.SAXNotRecognizedException; 28320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonimport org.xml.sax.SAXNotSupportedException; 29320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 30320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson/** 31320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p>A processor that checks an XML document against {@link Schema}.</p> 32f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 33320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 34320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * A validator is a thread-unsafe and non-reentrant object. 35320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * In other words, it is the application's responsibility to make 36320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * sure that one {@link Validator} object is not used from 37320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * more than one thread at any given time, and while the <tt>validate</tt> 38320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * method is invoked, applications may not recursively call 39320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * the <tt>validate</tt> method. 40320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 41320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 42320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Note that while the {@link #validate(javax.xml.transform.Source)} and {@link #validate(javax.xml.transform.Source, javax.xml.transform.Result)} 43320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * methods take a {@link Source} instance, the <code>Source</code> 44320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * instance must be a <code>SAXSource</code>, <code>DOMSource</code>, <code>StAXSource</code> or <code>StreamSource</code>. 45320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 46320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @author <a href="mailto:Kohsuke.Kawaguchi@Sun.com">Kohsuke Kawaguchi</a> 47320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @version $Revision: 888884 $, $Date: 2009-12-09 09:36:46 -0800 (Wed, 09 Dec 2009) $ 48320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @since 1.5 49320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 50320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonpublic abstract class Validator { 51f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 52320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 53320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Constructor for derived classes. 54f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 55320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 56320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * The constructor does nothing. 57f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 58320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 59320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Derived classes must create {@link Validator} objects that have 60320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <tt>null</tt> {@link ErrorHandler} and 61320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <tt>null</tt> {@link LSResourceResolver}. 62320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 63320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson protected Validator() { 64320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 65f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 66d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes /** 67d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes * <p>Reset this <code>Validator</code> to its original configuration.</p> 68f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 69d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes * <p><code>Validator</code> is reset to the same state as when it was created with 70d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes * {@link Schema#newValidator()}. 71d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes * <code>reset()</code> is designed to allow the reuse of existing <code>Validator</code>s 72d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes * thus saving resources associated with the creation of new <code>Validator</code>s.</p> 73f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 74d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes * <p>The reset <code>Validator</code> is not guaranteed to have the same {@link LSResourceResolver} or {@link ErrorHandler} 75d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes * <code>Object</code>s, e.g. {@link Object#equals(Object obj)}. It is guaranteed to have a functionally equal 76d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes * <code>LSResourceResolver</code> and <code>ErrorHandler</code>.</p> 77d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes */ 78d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes public abstract void reset(); 79320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson 80320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 81320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Validates the specified input. 82f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 83320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 84320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * This is just a convenience method of: 85320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <pre> 86320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * validate(source,null); 87320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * </pre> 88f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 89320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @see #setErrorHandler(ErrorHandler) 90320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 91320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public void validate(Source source) throws SAXException, IOException { 92320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson validate(source, null); 93320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 94f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 95320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 96320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Validates the specified input and send the augmented validation 97320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * result to the specified output. 98f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 99320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 100320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * This method places the following restrictions on the types of 101320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * the {@link Source}/{@link Result} accepted. 102f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 103320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <h4>{@link Source}/{@link Result} accepted:</h4> 104320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <table border=1> 105320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <thead> 106320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <tr> 107320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td></td> 108320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>{@link javax.xml.transform.sax.SAXSource}</td> 109320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>{@link javax.xml.transform.dom.DOMSource}</td> 110320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>{@link javax.xml.transform.stream.StreamSource}</td> 111320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * </tr> 112320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * </thead> 113320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <tbody> 114320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <tr> 115320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td><tt>null</tt></td> 116320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>OK</td> 117320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>OK</td> 118320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>OK</td> 119320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>OK</td> 120320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * </tr> 121320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <tr> 122320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>{@link javax.xml.transform.sax.SAXResult}</td> 123320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>OK</td> 124320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>Err</td> 125320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>Err</td> 126320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>Err</td> 127320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * </tr> 128320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <tr> 129320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>{@link javax.xml.transform.dom.DOMResult}</td> 130320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>Err</td> 131320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>OK</td> 132320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>Err</td> 133320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>Err</td> 134320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * </tr> 135320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <tr> 136320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>{@link javax.xml.transform.stream.StreamResult}</td> 137320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>Err</td> 138320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>Err</td> 139320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>Err</td> 140320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <td>OK</td> 141320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * </tr> 142320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * </tbody> 143320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * </table> 144320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 145320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 146320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * To validate one {@link Source} into another kind of {@link Result}, use the identity transformer 147320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * (see {@link javax.xml.transform.TransformerFactory#newTransformer()}). 148f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 149320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 150320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Errors found during the validation is sent to the specified 151320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * {@link ErrorHandler}. 152f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 153320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 154320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * If a document is valid, or if a document contains some errors 155320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * but none of them were fatal and the {@link ErrorHandler} didn't 156320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * throw any exception, then the method returns normally. 157f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 158320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @param source 159320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * XML to be validated. Must not be null. 160f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 161320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @param result 162320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * The {@link Result} object that receives (possibly augmented) 163320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * XML. This parameter can be null if the caller is not interested 164320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * in it. 165f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 166320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Note that when a {@link javax.xml.transform.dom.DOMResult} is used, 167320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * a validator might just pass the same DOM node from 168320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * {@link javax.xml.transform.dom.DOMSource} to 169320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * {@link javax.xml.transform.dom.DOMResult} 170320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * (in which case <tt>source.getNode()==result.getNode()</tt>), 171320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * it might copy the entire DOM tree, or it might alter the 172320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * node given by the source. 173f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 174320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @throws IllegalArgumentException 175320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * If the {@link Result} type doesn't match the {@link Source} type, 176320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * or if the specified source is not a 177320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * {@link javax.xml.transform.sax.SAXSource}, 178320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * {@link javax.xml.transform.dom.DOMSource} or 179f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * {@link javax.xml.transform.stream.StreamSource}. 180f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 181320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @throws SAXException 182320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * If the {@link ErrorHandler} throws a {@link SAXException} or 183320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * if a fatal error is found and the {@link ErrorHandler} returns 184320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * normally. 185f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 186320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @throws IOException 187320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * If the validator is processing a 188320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * {@link javax.xml.transform.sax.SAXSource} and the 189320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * underlying {@link org.xml.sax.XMLReader} throws an 190320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * {@link IOException}. 191f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 192320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @throws NullPointerException 193320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * If the <tt>source</tt> parameter is null. 194f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 195320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @see #validate(Source) 196320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 197320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public abstract void validate(Source source, Result result) throws SAXException, IOException; 198f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 199320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 200320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Sets the {@link ErrorHandler} to receive errors encountered 201320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * during the <code>validate</code> method invocation. 202f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 203320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 204320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Error handler can be used to customize the error handling process 205320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * during a validation. When an {@link ErrorHandler} is set, 206320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * errors found during the validation will be first sent 207320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * to the {@link ErrorHandler}. 208f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 209320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 210320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * The error handler can abort further validation immediately 211320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * by throwing {@link SAXException} from the handler. Or for example 212320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * it can print an error to the screen and try to continue the 213f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * validation by returning normally from the {@link ErrorHandler} 214f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 215320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 216320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * If any {@link Throwable} is thrown from an {@link ErrorHandler}, 217320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * the caller of the <code>validate</code> method will be thrown 218320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * the same {@link Throwable} object. 219f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 220320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 221320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * {@link Validator} is not allowed to 222320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * throw {@link SAXException} without first reporting it to 223320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * {@link ErrorHandler}. 224f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 225320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 226320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * When the {@link ErrorHandler} is null, the implementation will 227320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * behave as if the following {@link ErrorHandler} is set: 228320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <pre> 229320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * class DraconianErrorHandler implements {@link ErrorHandler} { 230320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * public void fatalError( {@link org.xml.sax.SAXParseException} e ) throws {@link SAXException} { 231320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * throw e; 232320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * } 233320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * public void error( {@link org.xml.sax.SAXParseException} e ) throws {@link SAXException} { 234320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * throw e; 235320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * } 236320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * public void warning( {@link org.xml.sax.SAXParseException} e ) throws {@link SAXException} { 237320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * // noop 238320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * } 239320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * } 240320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * </pre> 241f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 242320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 243320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * When a new {@link Validator} object is created, initially 244320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * this field is set to null. 245f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 246320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @param errorHandler 247320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * A new error handler to be set. This parameter can be null. 248320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 249320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public abstract void setErrorHandler(ErrorHandler errorHandler); 250f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 251320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 252320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Gets the current {@link ErrorHandler} set to this {@link Validator}. 253f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 254320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @return 255320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * This method returns the object that was last set through 256320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * the {@link #setErrorHandler(ErrorHandler)} method, or null 257320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * if that method has never been called since this {@link Validator} 258320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * has created. 259f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 260320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @see #setErrorHandler(ErrorHandler) 261320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 262320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public abstract ErrorHandler getErrorHandler(); 263f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 264320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 265320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Sets the {@link LSResourceResolver} to customize 266320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * resource resolution while in a validation episode. 267f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 268320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 269320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * {@link Validator} uses a {@link LSResourceResolver} 270320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * when it needs to locate external resources while a validation, 271320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * although exactly what constitutes "locating external resources" is 272320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * up to each schema language. 273f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 274320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 275320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * When the {@link LSResourceResolver} is null, the implementation will 276320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * behave as if the following {@link LSResourceResolver} is set: 277320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <pre> 278320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * class DumbLSResourceResolver implements {@link LSResourceResolver} { 279320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * public {@link org.w3c.dom.ls.LSInput} resolveResource( 280320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * String publicId, String systemId, String baseURI) { 281f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 282320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * return null; // always return null 283320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * } 284320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * } 285320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * </pre> 286f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 287320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 288320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * If a {@link LSResourceResolver} throws a {@link RuntimeException} 289320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * (or instances of its derived classes), 290f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * then the {@link Validator} will abort the parsing and 291320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * the caller of the <code>validate</code> method will receive 292f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * the same {@link RuntimeException}. 293f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 294320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 295320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * When a new {@link Validator} object is created, initially 296320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * this field is set to null. 297f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 298320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @param resourceResolver 299320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * A new resource resolver to be set. This parameter can be null. 300320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 301320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public abstract void setResourceResolver(LSResourceResolver resourceResolver); 302f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 303320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 304320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Gets the current {@link LSResourceResolver} set to this {@link Validator}. 305f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 306320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @return 307320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * This method returns the object that was last set through 308320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * the {@link #setResourceResolver(LSResourceResolver)} method, or null 309320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * if that method has never been called since this {@link Validator} 310320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * has created. 311f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 312320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @see #setErrorHandler(ErrorHandler) 313320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 314320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public abstract LSResourceResolver getResourceResolver(); 315f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 316f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 317f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 318320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 319320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Look up the value of a feature flag. 320320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 321320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p>The feature name is any fully-qualified URI. It is 322320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * possible for a {@link Validator} to recognize a feature name but 323320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * temporarily be unable to return its value. 324320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Some feature values may be available only in specific 325320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * contexts, such as before, during, or after a validation. 326320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 327320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p>Implementors are free (and encouraged) to invent their own features, 328320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * using names built on their own URIs.</p> 329320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 330320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @param name The feature name, which is a non-null fully-qualified URI. 331320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @return The current value of the feature (true or false). 332320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @exception org.xml.sax.SAXNotRecognizedException If the feature 333320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * value can't be assigned or retrieved. 334320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @exception org.xml.sax.SAXNotSupportedException When the 335f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * {@link Validator} recognizes the feature name but 336320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * cannot determine its value at this time. 337320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @throws NullPointerException 338320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * When the name parameter is null. 339320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @see #setFeature(String, boolean) 340320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 341320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException { 34286acc043d3334651ee26c65467d78d6cefedd397Kenny Root if (name == null) { 34386acc043d3334651ee26c65467d78d6cefedd397Kenny Root throw new NullPointerException("name == null"); 34486acc043d3334651ee26c65467d78d6cefedd397Kenny Root } 345320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson throw new SAXNotRecognizedException(name); 346320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 347f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 348320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 349320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Set the value of a feature flag. 350320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 351320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p> 352320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Feature can be used to control the way a {@link Validator} 353320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * parses schemas, although {@link Validator}s are not required 354320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * to recognize any specific property names.</p> 355320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 356320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p>The feature name is any fully-qualified URI. It is 357320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * possible for a {@link Validator} to expose a feature value but 358320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * to be unable to change the current value. 359f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Some feature values may be immutable or mutable only 360f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * in specific contexts, such as before, during, or after 361320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * a validation.</p> 362320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 363320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @param name The feature name, which is a non-null fully-qualified URI. 364320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @param value The requested value of the feature (true or false). 365f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 366320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @exception org.xml.sax.SAXNotRecognizedException If the feature 367320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * value can't be assigned or retrieved. 368320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @exception org.xml.sax.SAXNotSupportedException When the 369f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * {@link Validator} recognizes the feature name but 370320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * cannot set the requested value. 371320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @throws NullPointerException 372320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * When the name parameter is null. 373f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 374320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @see #getFeature(String) 375320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 376320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public void setFeature(String name, boolean value) throws SAXNotRecognizedException, SAXNotSupportedException { 37786acc043d3334651ee26c65467d78d6cefedd397Kenny Root if (name == null) { 37886acc043d3334651ee26c65467d78d6cefedd397Kenny Root throw new NullPointerException("name == null"); 37986acc043d3334651ee26c65467d78d6cefedd397Kenny Root } 380320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson throw new SAXNotRecognizedException(name); 381320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 382f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 383320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 384320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Set the value of a property. 385320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 386320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p>The property name is any fully-qualified URI. It is 387320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * possible for a {@link Validator} to recognize a property name but 388320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * to be unable to change the current value. 389f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Some property values may be immutable or mutable only 390f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * in specific contexts, such as before, during, or after 391320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * a validation.</p> 392320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 393320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p>{@link Validator}s are not required to recognize setting 394320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * any specific property names.</p> 395320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 396320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @param name The property name, which is a non-null fully-qualified URI. 397320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @param object The requested value for the property. 398320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @exception org.xml.sax.SAXNotRecognizedException If the property 399320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * value can't be assigned or retrieved. 400320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @exception org.xml.sax.SAXNotSupportedException When the 401f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * {@link Validator} recognizes the property name but 402320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * cannot set the requested value. 403320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @throws NullPointerException 404320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * When the name parameter is null. 405320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 406320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public void setProperty(String name, Object object) throws SAXNotRecognizedException, SAXNotSupportedException { 40786acc043d3334651ee26c65467d78d6cefedd397Kenny Root if (name == null) { 40886acc043d3334651ee26c65467d78d6cefedd397Kenny Root throw new NullPointerException("name == null"); 40986acc043d3334651ee26c65467d78d6cefedd397Kenny Root } 410320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson throw new SAXNotRecognizedException(name); 411320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 412f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 413320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson /** 414320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Look up the value of a property. 415320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 416320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p>The property name is any fully-qualified URI. It is 417320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * possible for a {@link Validator} to recognize a property name but 418320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * temporarily be unable to return its value. 419320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Some property values may be available only in specific 420320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * contexts, such as before, during, or after a validation.</p> 421320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 422320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p>{@link Validator}s are not required to recognize any specific 423320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * property names.</p> 424320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 425320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p>Implementors are free (and encouraged) to invent their own properties, 426320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * using names built on their own URIs.</p> 427320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * 428320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @param name The property name, which is a non-null fully-qualified URI. 429320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @return The current value of the property. 430320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @exception org.xml.sax.SAXNotRecognizedException If the property 431320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * value can't be assigned or retrieved. 432320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @exception org.xml.sax.SAXNotSupportedException When the 433f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * XMLReader recognizes the property name but 434320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * cannot determine its value at this time. 435320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @throws NullPointerException 436320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * When the name parameter is null. 437320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @see #setProperty(String, Object) 438320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */ 439320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException { 44086acc043d3334651ee26c65467d78d6cefedd397Kenny Root if (name == null) { 44186acc043d3334651ee26c65467d78d6cefedd397Kenny Root throw new NullPointerException("name == null"); 44286acc043d3334651ee26c65467d78d6cefedd397Kenny Root } 443320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson throw new SAXNotRecognizedException(name); 444320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson } 445320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson} 446