KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > oracle > toplink > essentials > platform > xml > jaxp > JAXPParser


1 /*
2  * The contents of this file are subject to the terms
3  * of the Common Development and Distribution License
4  * (the "License"). You may not use this file except
5  * in compliance with the License.
6  *
7  * You can obtain a copy of the license at
8  * glassfish/bootstrap/legal/CDDLv1.0.txt or
9  * https://glassfish.dev.java.net/public/CDDLv1.0.html.
10  * See the License for the specific language governing
11  * permissions and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL
14  * HEADER in each file and include the License file at
15  * glassfish/bootstrap/legal/CDDLv1.0.txt. If applicable,
16  * add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your
18  * own identifying information: Portions Copyright [yyyy]
19  * [name of copyright owner]
20  */

21 // Copyright (c) 1998, 2005, Oracle. All rights reserved.
22
package oracle.toplink.essentials.platform.xml.jaxp;
23
24 import java.io.File JavaDoc;
25 import java.io.InputStream JavaDoc;
26 import java.io.IOException JavaDoc;
27 import java.io.Reader JavaDoc;
28 import java.net.URL JavaDoc;
29 import javax.xml.parsers.DocumentBuilder JavaDoc;
30 import javax.xml.parsers.DocumentBuilderFactory JavaDoc;
31 import javax.xml.parsers.ParserConfigurationException JavaDoc;
32 import javax.xml.transform.Source JavaDoc;
33 import javax.xml.transform.Transformer JavaDoc;
34 import javax.xml.transform.TransformerException JavaDoc;
35 import javax.xml.transform.TransformerFactory JavaDoc;
36 import javax.xml.transform.dom.DOMResult JavaDoc;
37 import org.w3c.dom.Document JavaDoc;
38 import org.xml.sax.EntityResolver JavaDoc;
39 import org.xml.sax.ErrorHandler JavaDoc;
40 import org.xml.sax.InputSource JavaDoc;
41 import org.xml.sax.SAXException JavaDoc;
42 import org.xml.sax.SAXParseException JavaDoc;
43 import oracle.toplink.essentials.platform.xml.XMLParser;
44 import oracle.toplink.essentials.platform.xml.XMLPlatformException;
45
46 public class JAXPParser implements XMLParser {
47     private static final String JavaDoc SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
48     private static final String JavaDoc XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
49     private static final String JavaDoc JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
50     private DocumentBuilderFactory JavaDoc documentBuilderFactory;
51     private EntityResolver JavaDoc entityResolver;
52     private ErrorHandler JavaDoc errorHandler;
53
54     public JAXPParser() {
55         super();
56         documentBuilderFactory = DocumentBuilderFactory.newInstance();
57         setNamespaceAware(true);
58         setWhitespacePreserving(false);
59     }
60
61     public void setNamespaceAware(boolean isNamespaceAware) {
62         documentBuilderFactory.setNamespaceAware(isNamespaceAware);
63     }
64
65     public void setWhitespacePreserving(boolean isWhitespacePreserving) {
66         documentBuilderFactory.setIgnoringElementContentWhitespace(!isWhitespacePreserving);
67     }
68
69     public int getValidationMode() {
70         if (!documentBuilderFactory.isValidating()) {
71             return XMLParser.NONVALIDATING;
72         }
73
74         try {
75             if (null == documentBuilderFactory.getAttribute(SCHEMA_LANGUAGE)) {
76                 return XMLParser.DTD_VALIDATION;
77             }
78         } catch (IllegalArgumentException JavaDoc e) {
79             return XMLParser.DTD_VALIDATION;
80         }
81
82         return XMLParser.SCHEMA_VALIDATION;
83     }
84
85     public void setValidationMode(int validationMode) {
86         switch (validationMode) {
87         case XMLParser.NONVALIDATING: {
88             documentBuilderFactory.setValidating(false);
89             // documentBuilderFactory.setAttribute(SCHEMA_LANGUAGE, null);
90
return;
91         }
92         case XMLParser.DTD_VALIDATION: {
93             documentBuilderFactory.setValidating(true);
94             // documentBuilderFactory.setAttribute(SCHEMA_LANGUAGE, null);
95
return;
96         }
97         case XMLParser.SCHEMA_VALIDATION: {
98             try {
99                 documentBuilderFactory.setAttribute(SCHEMA_LANGUAGE, XML_SCHEMA);
100                 documentBuilderFactory.setValidating(true);
101             } catch (IllegalArgumentException JavaDoc e) {
102                 // This parser does not support XML Schema validation so leave it as
103
// a non-validating parser.
104
}
105             return;
106         }
107         }
108     }
109
110     public EntityResolver JavaDoc getEntityResolver() {
111         return entityResolver;
112     }
113
114     public void setEntityResolver(EntityResolver JavaDoc entityResolver) {
115         this.entityResolver = entityResolver;
116     }
117
118     public ErrorHandler JavaDoc getErrorHandler() {
119         return errorHandler;
120     }
121
122     public void setErrorHandler(ErrorHandler JavaDoc errorHandler) {
123         this.errorHandler = errorHandler;
124     }
125
126     public void setXMLSchema(URL JavaDoc url) throws XMLPlatformException {
127         if (null == url) {
128             return;
129         }
130         try {
131             documentBuilderFactory.setAttribute(SCHEMA_LANGUAGE, XML_SCHEMA);
132             documentBuilderFactory.setAttribute(JAXP_SCHEMA_SOURCE, url.toString());
133         } catch (IllegalArgumentException JavaDoc e) {
134             // The attribute isn't supported so do nothing
135
} catch (Exception JavaDoc e) {
136             XMLPlatformException.xmlPlatformErrorResolvingXMLSchema(url, e);
137         }
138     }
139
140     public void setXMLSchemas(Object JavaDoc[] schemas) throws XMLPlatformException {
141         if ((null == schemas) || (schemas.length == 0)) {
142             return;
143         }
144         try {
145             documentBuilderFactory.setAttribute(SCHEMA_LANGUAGE, XML_SCHEMA);
146             documentBuilderFactory.setAttribute(JAXP_SCHEMA_SOURCE, schemas);
147         } catch (IllegalArgumentException JavaDoc e) {
148             // The attribute isn't supported so do nothing
149
} catch (Exception JavaDoc e) {
150             XMLPlatformException.xmlPlatformErrorResolvingXMLSchemas(schemas, e);
151         }
152     }
153
154     public Document JavaDoc parse(InputSource JavaDoc inputSource) throws XMLPlatformException {
155         try {
156             return getDocumentBuilder().parse(inputSource);
157         } catch (SAXException JavaDoc e) {
158             throw XMLPlatformException.xmlPlatformParseException(e);
159         } catch (IOException JavaDoc e) {
160             throw XMLPlatformException.xmlPlatformParseException(e);
161         }
162     }
163
164     public Document JavaDoc parse(File JavaDoc file) throws XMLPlatformException {
165         try {
166             return getDocumentBuilder().parse(file);
167         } catch (SAXParseException JavaDoc e) {
168             throw XMLPlatformException.xmlPlatformSAXParseException(e);
169         } catch (SAXException JavaDoc e) {
170             throw XMLPlatformException.xmlPlatformParseException(e);
171         } catch (IOException JavaDoc e) {
172             throw XMLPlatformException.xmlPlatformFileNotFoundException(file, e);
173         }
174     }
175
176     public Document JavaDoc parse(InputStream JavaDoc inputStream) throws XMLPlatformException {
177         try {
178             return getDocumentBuilder().parse(inputStream);
179         } catch (SAXParseException JavaDoc e) {
180             throw XMLPlatformException.xmlPlatformSAXParseException(e);
181         } catch (SAXException JavaDoc e) {
182             throw XMLPlatformException.xmlPlatformParseException(e);
183         } catch (IOException JavaDoc e) {
184             throw XMLPlatformException.xmlPlatformParseException(e);
185         }
186     }
187
188     public Document JavaDoc parse(Reader JavaDoc reader) throws XMLPlatformException {
189         InputSource JavaDoc inputSource = new InputSource JavaDoc(reader);
190         return parse(inputSource);
191     }
192
193     public Document JavaDoc parse(Source JavaDoc source) throws XMLPlatformException {
194         try {
195             TransformerFactory JavaDoc transformerFactory = TransformerFactory.newInstance();
196             Transformer JavaDoc transformer = transformerFactory.newTransformer();
197             DOMResult JavaDoc domResult = new DOMResult JavaDoc();
198             transformer.transform(source, domResult);
199             return (Document JavaDoc)domResult.getNode();
200         } catch (TransformerException JavaDoc e) {
201             throw XMLPlatformException.xmlPlatformParseException(e);
202         }
203     }
204
205     public Document JavaDoc parse(URL JavaDoc url) throws XMLPlatformException {
206         try {
207             InputStream JavaDoc inputStream = url.openStream();
208             return parse(inputStream);
209         } catch (IOException JavaDoc e) {
210             throw XMLPlatformException.xmlPlatformParseException(e);
211         }
212     }
213
214     private DocumentBuilder JavaDoc getDocumentBuilder() {
215         try {
216             DocumentBuilder JavaDoc documentBuilder = documentBuilderFactory.newDocumentBuilder();
217             documentBuilder.setEntityResolver(entityResolver);
218             documentBuilder.setErrorHandler(errorHandler);
219             return documentBuilder;
220         } catch (ParserConfigurationException JavaDoc e) {
221             throw XMLPlatformException.xmlPlatformParseException(e);
222         }
223     }
224 }
225
Popular Tags