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