XMLParser.java
上传用户:xfwatch
上传日期:2020-12-14
资源大小:872k
文件大小:4k
源码类别:

中间件编程

开发平台:

Java

  1. /*
  2.  * JBoss, Home of Professional Open Source
  3.  * Copyright 2008, Red Hat, Inc., and others contributors as indicated
  4.  * by the @authors tag. All rights reserved.
  5.  * See the copyright.txt in the distribution for a
  6.  * full listing of individual contributors.
  7.  * This copyrighted material is made available to anyone wishing to use,
  8.  * modify, copy, or redistribute it subject to the terms and conditions
  9.  * of the GNU Lesser General Public License, v. 2.1.
  10.  * This program is distributed in the hope that it will be useful, but WITHOUT A
  11.  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  12.  * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
  13.  * You should have received a copy of the GNU Lesser General Public License,
  14.  * v.2.1 along with this distribution; if not, write to the Free Software
  15.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  16.  * MA  02110-1301, USA.
  17.  */
  18. package org.jboss.blacktie.jatmibroker.core.conf;
  19. import java.io.File;
  20. import java.io.InputStream;
  21. import java.net.URL;
  22. import javax.xml.XMLConstants;
  23. import javax.xml.parsers.ParserConfigurationException;
  24. import javax.xml.parsers.SAXParser;
  25. import javax.xml.parsers.SAXParserFactory;
  26. import javax.xml.transform.stream.StreamSource;
  27. import javax.xml.validation.Schema;
  28. import javax.xml.validation.SchemaFactory;
  29. import org.apache.log4j.LogManager;
  30. import org.apache.log4j.Logger;
  31. import org.xml.sax.SAXException;
  32. import org.xml.sax.helpers.DefaultHandler;
  33. /**
  34.  * Class to create a parser and parse an XML file
  35.  */
  36. public class XMLParser {
  37. private static final Logger log = LogManager.getLogger(XMLParser.class);
  38. private DefaultHandler handler;
  39. private SAXParser saxParser;
  40. private Schema schema;
  41. /**
  42.  * Constructor
  43.  * 
  44.  * @param handler
  45.  *            - DefaultHandler for the SAX parser
  46.  */
  47. public XMLParser(DefaultHandler handler, String xsdFilename)
  48. throws ConfigurationException {
  49. this.handler = handler;
  50. create(xsdFilename);
  51. }
  52. /**
  53.  * Create the SAX parser
  54.  */
  55. private void create(String xsdFilename) throws ConfigurationException {
  56. try {
  57. String schemaDir = System.getenv("BLACKTIE_SCHEMA_DIR");
  58. if (schemaDir != null) {
  59. log.debug("SCHEMA DIR: " + schemaDir);
  60. schemaDir = schemaDir + System.getProperty("file.separator");
  61. xsdFilename = schemaDir + xsdFilename;
  62. }
  63. // Obtain a new instance of a SAXParserFactory.
  64. SAXParserFactory factory = SAXParserFactory.newInstance();
  65. factory.setNamespaceAware(true);
  66. factory.setValidating(true);
  67. SchemaFactory schemaFactory = SchemaFactory
  68. .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
  69. URL resource = Thread.currentThread().getContextClassLoader()
  70. .getResource(xsdFilename);
  71. if (resource != null) {
  72. schema = schemaFactory.newSchema(resource);
  73. } else {
  74. File file = new File(xsdFilename);
  75. if (file.exists()) {
  76. schema = schemaFactory.newSchema(file);
  77. } else {
  78. throw new ConfigurationException(
  79. "Could not load the schema: " + xsdFilename);
  80. }
  81. }
  82. factory.setSchema(schema);
  83. saxParser = factory.newSAXParser();
  84. } catch (SAXException e) {
  85. throw new ConfigurationException("Could not create a SAXParser: "
  86. + e.getMessage(), e);
  87. } catch (ParserConfigurationException e) {
  88. throw new ConfigurationException("Could not create a SAXParser: "
  89. + e.getMessage(), e);
  90. }
  91. }
  92. /**
  93.  * Parser a File
  94.  * 
  95.  * @param envXML
  96.  *            - File
  97.  */
  98. public void parse(String env) throws ConfigurationException {
  99. String configDir = System.getenv("BLACKTIE_CONFIGURATION_DIR");
  100. if (configDir != null && !configDir.equals("")) {
  101. env = configDir + "/" + env;
  102. }
  103. log.debug("read configuration from " + configDir + " directory");
  104. InputStream resource = Thread.currentThread().getContextClassLoader()
  105. .getResourceAsStream(env);
  106. if (resource != null) {
  107. try {
  108. schema.newValidator().validate(new StreamSource(resource));
  109. saxParser.parse(Thread.currentThread().getContextClassLoader()
  110. .getResourceAsStream(env), handler);
  111. } catch (Throwable t) {
  112. throw new ConfigurationException("Errors parse : " + env
  113. + " due to: " + t.getMessage(), t);
  114. }
  115. } else {
  116. throw new ConfigurationException(
  117. "Could not load the configuration file: " + env
  118. + " from directory: "
  119. + System.getProperty("user.dir"));
  120. }
  121. }
  122. }