⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pluginholdersaxfactory.java

📁 java开源的企业总线.xmlBlaster
💻 JAVA
字号:
/*------------------------------------------------------------------------------Name:      PluginHolderSaxFactory.javaProject:   xmlBlaster.orgCopyright: xmlBlaster.org, see xmlBlaster-LICENSE file------------------------------------------------------------------------------*/package org.xmlBlaster.engine.runlevel;import java.util.logging.Logger;import java.util.logging.Level;import org.xmlBlaster.util.Global;import org.xmlBlaster.util.XmlBlasterException;import org.xmlBlaster.util.SaxHandlerBase;import org.xmlBlaster.util.def.ErrorCode;import org.xmlBlaster.util.FileLocator;import org.xml.sax.Attributes;import org.xml.sax.InputSource;import java.io.InputStream;import java.net.URL;/** * This class parses an xml string to generate a PluginHolder object. * <p> * @author <a href="mailto:michele@laghi.eu">Michele Laghi</a> * @author <a href="mailto:xmlBlaster@marcelruff.info">Marcel Ruff</a> * @see <a href="http://www.xmlblaster.org/xmlBlaster/doc/requirements/engine.runlevel.html">engine.runlevel requirement</a> * <pre> *  &lt;action do='LOAD' *             onStartupRunlevel='3' *             sequence='5' *             onFail='RESOURCE_CONFIGURATION_PLUGINFAILED'/> * </pre> */public class PluginHolderSaxFactory extends SaxHandlerBase{   private String ME = "PluginHolderSaxFactory";   private final Global glob;   private static Logger log = Logger.getLogger(PluginHolderSaxFactory.class.getName());   private PluginHolder pluginHolder;   private XmlBlasterException ex;   private PluginConfigSaxFactory pluginFactory;   private boolean inPlugin = false; // to set when a '<plugin>' tag has been found (to know when to throw an ex)   private boolean isXmlBlaster = false;   private String currentNode;   /**    * Can be used as singleton.     */   public PluginHolderSaxFactory(Global glob) {      super(glob);      setUseLexicalHandler(true); // to allow CDATA wrapped attributes       this.glob = glob;      this.pluginFactory = new PluginConfigSaxFactory(this.glob);   }   /**    * resets the factory (to be invoked before parsing)    */   public void reset() {      this.ex = null; // reset the exeptions      this.pluginHolder = new PluginHolder(glob);      this.inPlugin = false;      this.currentNode = null;      this.isXmlBlaster = false;   }   /**    * returns the parsed object    */   public PluginHolder getObject() {      return this.pluginHolder;   }   /**    * Parses the given xmlBlasterPlugins.xml returns a PluginHolderData holding the data.     * @param the XML based ASCII string    */   public synchronized PluginHolder readObject(String xmlTxt) throws XmlBlasterException {      if (xmlTxt == null || xmlTxt.trim().length() < 1)         throw new XmlBlasterException(this.glob, ErrorCode.RESOURCE_CONFIGURATION, ME + ".readObject", "the <xmlBlaster> element is empty");      reset();      try {         this.init(xmlTxt);      // use SAX parser to parse it (is slow)      }      catch (Throwable thr) {         if (log.isLoggable(Level.FINE)) {            throw new XmlBlasterException(this.glob, ErrorCode.RESOURCE_CONFIGURATION, ME + ".readObject", "exception occured when parsing the <xmlBlaster> tag. In fact it was '" + xmlTxt + "'", thr);         }         else {            throw new XmlBlasterException(this.glob, ErrorCode.RESOURCE_CONFIGURATION, ME + ".readObject", "exception occured when parsing the <xmlBlaster> tag. In fact it was '" + xmlTxt + "'");         }      }      if (this.ex != null) throw ex;      if (!this.isXmlBlaster)         throw new XmlBlasterException(this.glob, ErrorCode.RESOURCE_CONFIGURATION, ME + ".readObject", "the string '" + xmlTxt + "' does not contain the <xmlBlaster> tag");      return this.pluginHolder;   }   /**    * Start element, event from SAX parser.    * <p />    * @param name Tag name    * @param attrs the attributes of the tag    */   public final void startElement(String uri, String localName, String name, Attributes attrs) {      if (this.ex != null ) return;      if ("plugin".equalsIgnoreCase(name)) {         this.inPlugin = true;         this.pluginFactory.reset();      }      if (this.inPlugin) {         this.pluginFactory.startElement(uri, localName, name, attrs);         return;      }      if ("node".equalsIgnoreCase(name)) {         String id = null;         if (attrs != null) id = attrs.getValue("id");         if (id == null || id.length() < 1)            this.ex = new XmlBlasterException(this.glob, ErrorCode.RESOURCE_CONFIGURATION, ME + ".startElement", "in the <node> tag the 'id' attribute is mandatory:found none");         this.currentNode = id;         return;      }      if ("xmlBlaster".equalsIgnoreCase(name)) {         this.isXmlBlaster = true;         return;      }      log.warning("startElement: unknown tag '" + name + "'");   }   /**    * The characters to be filled    */   public void characters(char[] ch, int start, int length) {      if (this.inPlugin) this.pluginFactory.characters(ch, start, length);   }   public void startCDATA() {      if (this.inPlugin) this.pluginFactory.startCDATA();   }   /**    * End element, event from SAX parser.    * <p />    * @param name Tag name    */   public void endElement(String uri, String localName, String name) {      if (this.ex != null ) return;      if (this.inPlugin) {         this.pluginFactory.endElement(uri, localName, name);         if ("plugin".equalsIgnoreCase(name)) {            if (this.currentNode != null) {               this.pluginHolder.addPluginConfig(this.currentNode, this.pluginFactory.getObject());            }            else this.pluginHolder.addDefaultPluginConfig(this.pluginFactory.getObject());            this.inPlugin = false;         }         return;      }      if ("node".equalsIgnoreCase(name)) {         this.currentNode = null;         return;      }      }   /**    * Dump state of this object into a XML ASCII string.    * <br>    * @param extraOffset indenting of tags for nice output    * @return internal state of the RequestBroker as a XML ASCII string    */   public final String writeObject(PluginHolder pluginConfig, String extraOffset) {      return pluginConfig.toXml(extraOffset);   }   /**    * A human readable name of this factory    * @return "PluginHolderSaxFactory"    */   public String getName() {      return "PluginHolderSaxFactory";   }   /**    * Reads the configuration file <code>xmlBlasterPlugins.xml</code>. It first searches the file according to the     * xmlBlaster search strategy specified in the engine.runlevel requirement.    * @see <a href="http://www.xmlblaster.org/xmlBlaster/doc/requirements/engine.runlevel.html">engine.runlevel requirement</a>    */   public PluginHolder readConfigFile() throws XmlBlasterException {      if (log.isLoggable(Level.FINER)) log.finer("readConfigFile");      FileLocator fileLocator = new FileLocator(this.glob);      URL url = fileLocator.findFileInXmlBlasterSearchPath("pluginsFile", "xmlBlasterPlugins.xml");      // null pointer check here ....      if (url == null) {         throw new XmlBlasterException(this.glob, ErrorCode.RESOURCE_CONFIGURATION, ME + ".readConfigFile",         "the file 'xmlBlasterPlugins.xml' has not been found in the search path nor in the property 'pluginsFile'");      }      if (log.isLoggable(Level.FINE)) log.fine("readConfigFile: the file is '" + url.getFile() + "'");      try {         InputStream fis = url.openStream();         InputSource inSource = new InputSource(fis);         reset();         init(url.toString(), inSource);         PluginHolder ret = getObject();         PluginConfig[] arr = ret.getAllPluginConfig(this.glob.getNodeId().getId());         for (int i=0; i<arr.length; i++)            arr[i].registerMBean();         if (log.isLoggable(Level.FINEST)) log.finest(".readConfigFile. The content: \n" + ret.toXml());         return ret;      }      catch(java.io.IOException ex) {         throw new XmlBlasterException(glob, ErrorCode.RESOURCE_CONFIGURATION, ME + ".readConfigFile", "the file '" + url.getFile() + "' has not been found", ex);      }   }   public static void main(String[] args) {      Global glob = Global.instance();      glob.init(args);      try {         PluginHolderSaxFactory factory = new PluginHolderSaxFactory(glob);         PluginHolder holder = factory.readConfigFile();         log.info(holder.toXml());      }      catch (XmlBlasterException ex) {         log.severe(ex.getMessage());      }   }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -