1 package org.objectweb.celtix.tools.common.dom; 2 3 import java.io.InputStream ; 4 import java.util.logging.Level ; 5 import java.util.logging.Logger ; 6 7 import javax.xml.XMLConstants ; 8 import javax.xml.parsers.SAXParser ; 9 import javax.xml.parsers.SAXParserFactory ; 10 import javax.xml.transform.stream.StreamSource ; 11 import javax.xml.validation.Schema ; 12 import javax.xml.validation.SchemaFactory ; 13 14 import org.objectweb.celtix.common.logging.LogUtils; 15 16 20 public final class SchemaValidatingSAXParser { 21 22 private static final Logger LOG = LogUtils.getL7dLogger(SchemaValidatingSAXParser.class); 23 24 private final SAXParserFactory parserFactory = SAXParserFactory.newInstance(); 25 private SAXParser parser; 26 private SchemaFactory schemaFactory; 27 private Schema schema; 28 29 public SchemaValidatingSAXParser() { 30 try { 31 parserFactory.setNamespaceAware(true); 32 parser = parserFactory.newSAXParser(); 33 } catch (javax.xml.parsers.ParserConfigurationException e) { 34 LOG.log(Level.SEVERE, "SAX_PARSER_CONFIG_ERR_MSG"); 35 } catch (org.xml.sax.SAXException saxe) { 36 LOG.log(Level.SEVERE, "SAX_PARSER_EXCEPTION_MSG"); 37 } 38 setValidating(true); 39 } 40 41 private InputStream getSchemaLocation() { 42 String toolspec = "/org/objectweb/celtix/tools/common/toolspec/tool-specification.xsd"; 43 return getClass().getResourceAsStream(toolspec); 44 } 45 46 public void setValidating(boolean validate) { 47 if (validate) { 48 this.schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 49 try { 50 this.schema = schemaFactory.newSchema(new StreamSource (getSchemaLocation())); 51 } catch (org.xml.sax.SAXException e) { 52 LOG.log(Level.SEVERE, "SCHEMA_FACTORY_EXCEPTION_MSG"); 53 } 54 this.parserFactory.setSchema(this.schema); 55 } 56 } 57 58 public SAXParser getSAXParser() { 59 return parser; 60 } 61 } 62 | Popular Tags |