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

📄 msghandler.java

📁 java开源的企业总线.xmlBlaster
💻 JAVA
字号:
/*------------------------------------------------------------------------------Name:      MsgHandler.javaProject:   xmlBlaster.orgCopyright: xmlBlaster.org, see xmlBlaster-LICENSE fileComment:   Implementation for administrative message access------------------------------------------------------------------------------*/package org.xmlBlaster.engine.admin.intern;import java.util.logging.Logger;import java.util.logging.Level;import org.xmlBlaster.engine.ServerScope;import org.xmlBlaster.util.plugin.I_Plugin;import org.xmlBlaster.util.context.ContextNode;import org.xmlBlaster.util.MsgUnit;import org.xmlBlaster.util.XmlBlasterException;import org.xmlBlaster.util.def.ErrorCode;import org.xmlBlaster.util.def.MethodName;import org.xmlBlaster.util.MsgUnitRaw;import org.xmlBlaster.engine.qos.AddressServer;import org.xmlBlaster.engine.admin.I_CommandHandler;import org.xmlBlaster.engine.admin.CommandManager;import org.xmlBlaster.engine.admin.CommandWrapper;import org.xmlBlaster.protocol.I_XmlBlaster;/** * Implementation of administrative access to xmlBlaster messages.  * @author xmlBlaster@marcelruff.info  * @since 0.79g */final public class MsgHandler implements I_CommandHandler, I_Plugin {   private String ME = "MsgHandler";   private ServerScope glob = null;   private static Logger log = Logger.getLogger(MsgHandler.class.getName());   private CommandManager commandManager = null;   /**    * This is called after creation of the plugin.     * @param glob The Global handle of this xmlBlaster server instance.    * @param commandManager My big brother taking care of me    */   public void initialize(ServerScope glob, CommandManager commandManager) {      this.glob = glob;      this.commandManager = commandManager;      this.ME = "MsgHandler" + this.glob.getLogPrefixDashed();      // "topic" now handled by CoreHandler.java to have all MBean accessors, changed 2006-02-028, marcel      //this.commandManager.register(ContextNode.TOPIC_MARKER_TAG, this);      // For old behavior we have no "_topic":      this.commandManager.register("_"+ContextNode.TOPIC_MARKER_TAG, this);      log.fine("Message administration plugin is initialized for '_topic/?content' etc.");   }   /**    * This method is called by the PluginManager (enforced by I_Plugin).     * @see org.xmlBlaster.util.plugin.I_Plugin#init(org.xmlBlaster.util.Global,org.xmlBlaster.util.plugin.PluginInfo)    */   public void init(org.xmlBlaster.util.Global glob, org.xmlBlaster.util.plugin.PluginInfo pluginInfo) {   }   /**    * Return plugin type for Plugin loader    * @return "MsgHandler"    */   public String getType() {      return "MsgHandler";   }   /**    * Return plugin version for Plugin loader    * @return "1.0"    */   public String getVersion() {      return "1.0";   }   /**    * Get a human readable name of this filter implementation    * @return "MsgHandler"    */   public String getName() {      return "MsgHandler";   }   /**    * @see org.xmlBlaster.engine.admin.I_CommandHandler#get(String,CommandWrapper)    */   public synchronized MsgUnit[] get(AddressServer addressServer, String sessionId, CommandWrapper cmd) throws XmlBlasterException {      if (cmd == null)         throw new XmlBlasterException(this.glob, ErrorCode.USER_ILLEGALARGUMENT, ME + ".get", "Please pass a command which is not null");      String client = cmd.getThirdLevel();      if (client == null || client.length() < 1)         throw new XmlBlasterException(this.glob, ErrorCode.USER_ILLEGALARGUMENT, ME + ".get", "Please pass a command which has a valid message oid added, '" + cmd.getCommand() + "' is too short, aborted request.");      if (client.startsWith("?")) {         // for example "/node/heron/?freeMem"         throw new XmlBlasterException(this.glob, ErrorCode.USER_ILLEGALARGUMENT, ME + ".get", "Please pass a command which has a valid message oid added, '" + cmd.getCommand() + "' is too short, aborted request.");      }      I_XmlBlaster xmlBlaster = glob.getAuthenticate().getXmlBlaster();      //  /node/heron/topic/?hello      //  /node/heron/topic/hello/?content      String oidTmp = cmd.getUserNameLevel();      if (oidTmp == null || oidTmp.length() < 1)         throw new XmlBlasterException(this.glob, ErrorCode.USER_ILLEGALARGUMENT, ME + ".get", "Please pass a command which has a valid message oid added, '" + cmd.getCommand() + "' is too short, aborted request.");      String oid = oidTmp;      if (oidTmp.startsWith("?"))         oid = oidTmp.substring(1);            // TODO should use the key from commandManager      String xmlKey = "<key oid='" + oid + "'/>";      // String qos = "<qos/>";      MsgUnitRaw[] msgUnitArrRaw = xmlBlaster.get(addressServer, sessionId, xmlKey, "<qos/>");//cmd.getQueryQosData().toXml());      MsgUnit[] msgUnits = new MsgUnit[msgUnitArrRaw.length];      MethodName method = MethodName.GET; // cmd.getMethod();      for (int i=0; i < msgUnits.length; i++) {         msgUnits[i] = new MsgUnit(this.glob, msgUnitArrRaw[i], method);      }      log.info(cmd.getCommand() + " returned " + msgUnitArrRaw.length + " messages");      if (log.isLoggable(Level.FINEST)) {         for (int ii=0; ii<msgUnitArrRaw.length; ii++) {            log.finest(msgUnitArrRaw[ii].toXml());         }      }      return msgUnits;   }   /**    * Set a value.     * @param sessionId Is null if not logged in    * @param cmd "/node/heron/topic/HelloMsgOid/?content=World"    * @return null if not set    */   public String set(AddressServer addressServer, String sessionId, CommandWrapper cmd) throws XmlBlasterException {      if (cmd == null)         throw new XmlBlasterException(this.glob, ErrorCode.USER_ILLEGALARGUMENT, ME + ".set", "Please pass a command which is not null");      String client = cmd.getThirdLevel();      if (client == null || client.length() < 1)         throw new XmlBlasterException(this.glob, ErrorCode.USER_ILLEGALARGUMENT, ME + ".set", "Please pass a command which has a valid message oid added, '" + cmd.getCommand() + "' is too short, aborted request.");      if (client.startsWith("?")) {         // for example "/node/heron/topic/Hello/?content=World!"         throw new XmlBlasterException(this.glob, ErrorCode.USER_ILLEGALARGUMENT, ME + ".set", "Please pass a command which has a valid message oid added, '" + cmd.getCommand() + "' is too short, aborted request.");      }      I_XmlBlaster xmlBlaster = glob.getAuthenticate().getXmlBlaster();      //  /node/heron/topic/?hello      //  /node/heron/topic/hello/?content=Hello world      String oidTmp = cmd.getUserNameLevel();      if (oidTmp == null || oidTmp.length() < 1)         throw new XmlBlasterException(this.glob, ErrorCode.USER_ILLEGALARGUMENT, ME + ".set", "Please pass a command which has a valid message oid added, '" + cmd.getCommand() + "' is too short, aborted request.");      String oid = oidTmp;      if (oidTmp.startsWith("?"))         throw new XmlBlasterException(this.glob, ErrorCode.USER_ILLEGALARGUMENT, ME + ".set", "Please pass a command which has a valid message oid added, '" + cmd.getCommand() + "' is too short, aborted request.");            String xmlKey = "<key oid='" + oid + "'/>";      String qos = "<qos/>";      // The returned array is a clone, we may manipulate it      MsgUnitRaw[] msgUnitArrRaw = xmlBlaster.get(addressServer, sessionId, xmlKey, qos);      if (msgUnitArrRaw.length < 1) {         log.info(cmd.getCommand() + " Message oid=" + oid + " not found");         return null;      }               //  /node/heron/topic/hello/?content=Hello world      String key = cmd.getKey();     // -> "content"      //String value = cmd.getValue(); // -> "Hello world"      if (!key.equalsIgnoreCase("content"))         throw new XmlBlasterException(glob, ErrorCode.USER_ADMIN_INVALID, ME,                      "Only the 'content' can currently be changed on messages," +                       " try something like '?content=Hello world'");      /*      for (int ii=0; ii<msgUnitArr.length; ii++) {         // Shallow clone: Setting new content. We keep the original key, but kill the original QoS         PublishQos publishQos = new PublishQos(glob);         msgUnitArrRaw[ii] = new MsgUnitRaw(msgUnitArr[ii].getKey(), value.getBytes(), publishQos.toXml());      }      */      String[] retArr = xmlBlaster.publishArr(addressServer, sessionId, msgUnitArrRaw);      log.info(cmd.getCommand() + " published " + msgUnitArrRaw.length + " messages");      StringBuffer sb = new StringBuffer(retArr.length * 60);      for (int ii=0; ii<retArr.length; ii++) {         sb.append(retArr[ii]);      }      return sb.toString();   }   public String help() {      return "Administration of xmlBlaster messages.";   }   public String help(String cmd) {      return help();   }   public void shutdown() {      if (log.isLoggable(Level.FINE)) log.fine("Shutdown ignored, nothing to do");   }} // end of class MsgHandler

⌨️ 快捷键说明

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