KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > fr > jayasoft > ivy > util > XMLHelper


1 /*
2  * This file is subject to the license found in LICENCE.TXT in the root directory of the project.
3  *
4  * #SNAPSHOT#
5  */

6 package fr.jayasoft.ivy.util;
7
8 import java.io.IOException JavaDoc;
9 import java.io.InputStream JavaDoc;
10 import java.net.URL JavaDoc;
11
12 import javax.xml.parsers.ParserConfigurationException JavaDoc;
13 import javax.xml.parsers.SAXParser JavaDoc;
14 import javax.xml.parsers.SAXParserFactory JavaDoc;
15
16 import org.xml.sax.SAXException JavaDoc;
17 import org.xml.sax.SAXNotRecognizedException JavaDoc;
18 import org.xml.sax.ext.LexicalHandler JavaDoc;
19 import org.xml.sax.helpers.DefaultHandler JavaDoc;
20
21 import fr.jayasoft.ivy.url.URLHandlerRegistry;
22
23 public abstract class XMLHelper {
24     private static SAXParserFactory JavaDoc _validatingFactory = SAXParserFactory.newInstance();
25
26     private static SAXParserFactory JavaDoc _factory = SAXParserFactory.newInstance();
27
28     static final String JavaDoc JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
29
30     static final String JavaDoc JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
31
32     static final String JavaDoc W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
33
34     private static boolean _canUseSchemaValidation = true;
35
36     static {
37         _validatingFactory.setNamespaceAware(true);
38         _validatingFactory.setValidating(true);
39     }
40
41     private static SAXParser JavaDoc newSAXParser(URL JavaDoc schema, InputStream JavaDoc schemaStream) throws ParserConfigurationException JavaDoc, SAXException JavaDoc {
42         if (!_canUseSchemaValidation || schema == null) {
43             return _factory.newSAXParser();
44         }
45         try {
46             SAXParser JavaDoc parser = _validatingFactory.newSAXParser();
47             parser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
48             parser.setProperty(JAXP_SCHEMA_SOURCE, schemaStream);
49             return parser;
50         } catch (SAXNotRecognizedException JavaDoc ex) {
51             System.err.println("WARNING: problem while setting JAXP validating property on SAXParser... XML validation will not be done: " + ex.getMessage());
52             _canUseSchemaValidation = false;
53             return _factory.newSAXParser();
54         }
55     }
56
57     // IMPORTANT: validation errors are only notified to the given handler, and
58
// do not cause exception
59
// implement warning error and fatalError methods in handler to be informed
60
// of validation errors
61
public static void parse(URL JavaDoc xmlURL, URL JavaDoc schema, DefaultHandler JavaDoc handler) throws SAXException JavaDoc, IOException JavaDoc, ParserConfigurationException JavaDoc {
62         parse(xmlURL, schema, handler, null);
63     }
64     
65     public static void parse(URL JavaDoc xmlURL, URL JavaDoc schema, DefaultHandler JavaDoc handler, LexicalHandler JavaDoc lHandler) throws SAXException JavaDoc, IOException JavaDoc, ParserConfigurationException JavaDoc {
66        InputStream JavaDoc xmlStream = URLHandlerRegistry.getDefault().openStream(xmlURL);
67        try {
68            parse(xmlStream, schema, handler, lHandler);
69        } finally {
70            try {
71                xmlStream.close();
72            } catch (IOException JavaDoc e) {}
73        }
74     }
75     
76     public static void parse(InputStream JavaDoc xmlStream, URL JavaDoc schema, DefaultHandler JavaDoc handler, LexicalHandler JavaDoc lHandler) throws SAXException JavaDoc, IOException JavaDoc, ParserConfigurationException JavaDoc {
77         InputStream JavaDoc schemaStream = null;
78         try {
79             if (schema != null) {
80                 schemaStream = URLHandlerRegistry.getDefault().openStream(schema);
81             }
82             SAXParser JavaDoc parser = XMLHelper.newSAXParser(schema, schemaStream);
83             
84             if (lHandler != null) {
85                 try {
86                     parser.setProperty("http://xml.org/sax/properties/lexical-handler", lHandler);
87                 } catch (SAXException JavaDoc ex) {
88                     System.err.println("WARNING: problem while setting the lexical handler property on SAXParser: " + ex.getMessage());
89                     // continue without the lexical handler
90
}
91             }
92             
93             parser.parse(xmlStream, handler);
94         } finally {
95             if (schemaStream != null) {
96                 try {
97                     schemaStream.close();
98                 } catch (IOException JavaDoc ex) {
99                 }
100             }
101         }
102     }
103
104     public static boolean canUseSchemaValidation() {
105         return _canUseSchemaValidation;
106     }
107
108 }
109
Popular Tags