KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jdom > input > JAXPParserFactory


1 /*--
2
3  $Id: JAXPParserFactory.java,v 1.5 2004/02/27 21:08:47 jhunter Exp $
4
5  Copyright (C) 2000-2004 Jason Hunter & Brett McLaughlin.
6  All rights reserved.
7
8  Redistribution and use in source and binary forms, with or without
9  modification, are permitted provided that the following conditions
10  are met:
11
12  1. Redistributions of source code must retain the above copyright
13     notice, this list of conditions, and the following disclaimer.
14
15  2. Redistributions in binary form must reproduce the above copyright
16     notice, this list of conditions, and the disclaimer that follows
17     these conditions in the documentation and/or other materials
18     provided with the distribution.
19
20  3. The name "JDOM" must not be used to endorse or promote products
21     derived from this software without prior written permission. For
22     written permission, please contact <request_AT_jdom_DOT_org>.
23
24  4. Products derived from this software may not be called "JDOM", nor
25     may "JDOM" appear in their name, without prior written permission
26     from the JDOM Project Management <request_AT_jdom_DOT_org>.
27
28  In addition, we request (but do not require) that you include in the
29  end-user documentation provided with the redistribution and/or in the
30  software itself an acknowledgement equivalent to the following:
31      "This product includes software developed by the
32       JDOM Project (http://www.jdom.org/)."
33  Alternatively, the acknowledgment may be graphical using the logos
34  available at http://www.jdom.org/images/logos.
35
36  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  DISCLAIMED. IN NO EVENT SHALL THE JDOM AUTHORS OR THE PROJECT
40  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  SUCH DAMAGE.
48
49  This software consists of voluntary contributions made by many
50  individuals on behalf of the JDOM Project and was originally
51  created by Jason Hunter <jhunter_AT_jdom_DOT_org> and
52  Brett McLaughlin <brett_AT_jdom_DOT_org>. For more information
53  on the JDOM Project, please see <http://www.jdom.org/>.
54
55  */

56
57 package org.jdom.input;
58
59 import java.util.*;
60
61 import javax.xml.parsers.*;
62
63 import org.jdom.*;
64 import org.xml.sax.*;
65
66 /**
67  * A non-public utility class to allocate JAXP SAX parsers.
68  *
69  * @version $Revision: 1.5 $, $Date: 2004/02/27 21:08:47 $
70  * @author Laurent Bihanic
71  */

72 class JAXPParserFactory { // package protected
73

74     private static final String JavaDoc CVS_ID =
75       "@(#) $RCSfile: JAXPParserFactory.java,v $ $Revision: 1.5 $ $Date: 2004/02/27 21:08:47 $ $Name: $";
76
77     /** JAXP 1.2 schema language property id. */
78     private static final String JavaDoc JAXP_SCHEMA_LANGUAGE_PROPERTY =
79        "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
80
81     /** JAXP 1.2 schema location property id. */
82     private static final String JavaDoc JAXP_SCHEMA_LOCATION_PROPERTY =
83        "http://java.sun.com/xml/jaxp/properties/schemaSource";
84
85     /**
86      * Private constructor to forbid allocating instances of this utility
87      * class.
88      */

89     private JAXPParserFactory() {
90         // Never called.
91
}
92
93     /* Implementor's note regarding createParser() design: The features and
94     properties are normally set in SAXBuilder, but we take them in
95     createParser() as well because some features or properties may need to be
96     applied during the JAXP parser construction. Today, for example, properties
97     is used as it's the only way to configure schema validation: JAXP defines
98     schema validation properties but SAX does not. This reflects in the Apache
99     Xerces implementation where the SAXParser implementation supports the JAXP
100     properties but the XMLReader does not. Hence, configuring schema validation
101     must be done on the SAXParser object which is only visible in
102     JAXParserFactory. Features is also passed in case some future JAXP release
103     defines JAXP-specific features.
104      */

105
106     /**
107      * Creates a SAX parser allocated through the configured JAXP SAX
108      * parser factory.
109      *
110      * @param validating whether a validating parser is requested.
111      * @param features the user-defined SAX features.
112      * @param properties the user-defined SAX properties.
113      *
114      * @return a configured XMLReader.
115      *
116      * @throws JDOMException if any error occurred when allocating or
117      * configuring the JAXP SAX parser.
118      */

119     public static XMLReader createParser(boolean validating,
120                           Map features, Map properties) throws JDOMException {
121         try {
122             SAXParser parser = null;
123
124             // Allocate and configure JAXP SAX parser factory.
125
SAXParserFactory factory = SAXParserFactory.newInstance();
126             factory.setValidating(validating);
127             factory.setNamespaceAware(true);
128
129             try {
130                 // Allocate parser.
131
parser = factory.newSAXParser();
132             }
133             catch (ParserConfigurationException e) {
134                 throw new JDOMException("Could not allocate JAXP SAX Parser", e);
135             }
136
137             // Set user-defined JAXP properties (if any)
138
setProperty(parser, properties, JAXP_SCHEMA_LANGUAGE_PROPERTY);
139             setProperty(parser, properties, JAXP_SCHEMA_LOCATION_PROPERTY);
140
141             // Return configured SAX XMLReader.
142
return parser.getXMLReader();
143         }
144         catch (SAXException e) {
145             throw new JDOMException("Could not allocate JAXP SAX Parser", e);
146         }
147     }
148
149     /**
150      * Sets a property on a JAXP SAX parser object if and only if it
151      * is declared in the user-defined properties.
152      *
153      * @param parser the JAXP SAX parser to configure.
154      * @param properties the user-defined SAX properties.
155      * @param name the name of the property to set.
156      *
157      * @throws JDOMException if any error occurred while configuring
158      * the property.
159      */

160     private static void setProperty(SAXParser parser,
161                         Map properties, String JavaDoc name) throws JDOMException {
162         try {
163             if (properties.containsKey(name)) {
164                 parser.setProperty(name, properties.get(name));
165             }
166         }
167         catch (SAXNotSupportedException e) {
168             throw new JDOMException(
169                 name + " property not supported for JAXP parser " +
170                 parser.getClass().getName());
171         }
172         catch (SAXNotRecognizedException e) {
173             throw new JDOMException(
174                 name + " property not recognized for JAXP parser " +
175                 parser.getClass().getName());
176         }
177     }
178 }
179
180
Popular Tags