appletservlet.java

来自「java开源的企业总线.xmlBlaster」· Java 代码 · 共 820 行 · 第 1/3 页

JAVA
820
字号
            }         }         else if (actionType.equals(I_XmlBlasterAccessRaw.UNSUBSCRIBE_NAME)) { // "unSubscribe"            if (log.isLoggable(Level.FINE)) log.fine("unSubscribe arrived ...");            UnSubscribeReturnQos[] ret;            if (oid != null) {               UnSubscribeKey xmlKey = new UnSubscribeKey(glob, oid);               ret = xmlBlaster.unSubscribe(xmlKey.toXml(), qos);            }            else if (key != null) {               ret = xmlBlaster.unSubscribe(key, qos);            }            else {               String str = "Please call servlet with some 'key.oid=...' or 'key=<key ...' when unsubscribing";               log.warning(str);               throw new XmlBlasterException(this.initialGlobal, ErrorCode.USER_CONFIGURATION, ME, str);            }            Vector arr = new Vector();            for (int ii=0; ii<ret.length; ii++) {               arr.add(ret[ii].getData().toJXPath());               if (log.isLoggable(Level.FINE)) log.fine("UnSubscribed " + ret[ii].getSubscriptionId());            }            returnObject = (Hashtable[])arr.toArray(new Hashtable[arr.size()]);         }         else if (actionType.equals(I_XmlBlasterAccessRaw.GET_NAME)) { // "get"            if (log.isLoggable(Level.FINE)) log.fine("get arrived ...");            MsgUnit[] msgUnitArr = xmlBlaster.get(key, qos);            Vector list = new Vector(msgUnitArr.length*3);            for (int i=0; i<msgUnitArr.length; i++) {               list.add(((MsgQosData)msgUnitArr[i].getQosData()).toJXPath());               list.add(((MsgKeyData)msgUnitArr[i].getKeyData()).toJXPath());               list.add(msgUnitArr[i].getContent());            }            returnObject = list;         }         else if (actionType.equals(I_XmlBlasterAccessRaw.PUBLISH_NAME)) { // "publish"            if (log.isLoggable(Level.FINE)) log.fine("publish arrived ...");            if (key == null) {               String str = "Please call servlet with some key when publishing";               log.warning(str);               XmlBlasterException x = new XmlBlasterException(this.initialGlobal, ErrorCode.USER_ILLEGALARGUMENT, ME, str);               writeResponse(res, I_XmlBlasterAccessRaw.EXCEPTION_NAME, x.getMessage());               return;            }            if (log.isLoggable(Level.FINE)) log.fine("Publishing '" + key + "'");            MsgUnit msgUnit = new MsgUnit(glob, key, content, qos);            try {               PublishReturnQos prq = xmlBlaster.publish(msgUnit);               returnObject = prq.getData().toJXPath();               if (log.isLoggable(Level.FINE)) log.fine("Success: Publishing done, returned oid=" + prq.getKeyOid());            } catch(XmlBlasterException e) {               log.warning("XmlBlasterException: " + e.getMessage());            }         }         else if (actionType.equals(I_XmlBlasterAccessRaw.ERASE_NAME)) { // "erase"            if (log.isLoggable(Level.FINE)) log.fine("erase arrived ...");            EraseReturnQos[] ret;            if (oid != null) {               EraseKey ek = new EraseKey(glob, oid);               ret = xmlBlaster.erase(ek.toXml(), qos);            }            else if (key != null) {               ret = xmlBlaster.erase(key, qos);            }            else {               String str = "Please call servlet with some 'key.oid=...' or 'key=<key ...' when subscribing";               log.warning(str);               throw new XmlBlasterException(this.initialGlobal, ErrorCode.USER_CONFIGURATION, ME, str);            }            Vector arr = new Vector();            for (int ii=0; ii<ret.length; ii++) {               arr.add(ret[ii].getData().toJXPath());               if (log.isLoggable(Level.FINE)) log.fine("Erased " + ret[ii].getKeyOid());            }            returnObject = (Hashtable[])arr.toArray(new Hashtable[arr.size()]);         }         // TODO: not yet tested         else if (actionType.equals("xmlScript")) {            // Send xml encoded requests to the xmlBlaster server.             // http://www.xmlblaster.org/xmlBlaster/doc/requirements/client.script.html            java.io.Reader reader = new java.io.StringReader(xmlRequest);            java.io.OutputStream outStream = new java.io.ByteArrayOutputStream();            XmlScriptClient interpreter =                 new XmlScriptClient(glob, xmlBlaster, pushHandler, null, outStream);            interpreter.parse(reader);            returnObject = outStream.toString();         }         else {            String str = "Unknown or missing 'ActionType=" + actionType + "' please choose 'subscribe' 'unSubscribe' 'erase' etc.";            log.warning(str);            throw new XmlBlasterException(this.initialGlobal, ErrorCode.USER_CONFIGURATION, ME, str);         }         writeResponse(res, actionType, returnObject);      } catch (XmlBlasterException e) {         log.warning("Caught XmlBlaster Exception: " + e.getMessage());         writeResponse(res, I_XmlBlasterAccessRaw.EXCEPTION_NAME, e.getMessage());      } catch (Throwable e) {         log.severe("Exception: " + e.toString());         writeResponse(res, I_XmlBlasterAccessRaw.EXCEPTION_NAME, XmlBlasterException.convert(this.initialGlobal, ME, "", e).getMessage());      }   }   /**    * Setting the system properties.    * <p />    * These may be overwritten in zone.properties, e.g.    *    servlets.default.initArgs=servlets.default.initArgs=org.xml.sax.parser=org.apache.crimson.parser.Parser2    * <p />    * We set the properties to choose JacORB and Suns XML parser as a default.    */   static public final void initSystemProperties(ServletConfig conf) {      Properties props = System.getProperties();      // Check for orb configuration      if (conf.getInitParameter("org.omg.CORBA.ORBClass") != null) { // "org.jacorb.orb.ORB"         props.put( "org.omg.CORBA.ORBClass", conf.getInitParameter("org.omg.CORBA.ORBClass"));         log.info("Using servlet system parameter org.omg.CORBA.ORBClass=" + props.get("org.omg.CORBA.ORBClass"));      }      if (conf.getInitParameter("org.omg.CORBA.ORBSingletonClass") != null) { // "org.jacorb.orb.ORBSingleton");         props.put( "org.omg.CORBA.ORBSingletonClass", conf.getInitParameter("org.omg.CORBA.ORBSingletonClass"));         log.info("Using servlet system parameter org.omg.CORBA.ORBSingletonClass=" + props.get("org.omg.CORBA.ORBSingletonClass"));      }      // xmlBlaster uses Suns XML parser as default      /*      if (conf.getInitParameter("org.xml.sax.parser") != null) {         props.put( "org.xml.sax.parser", conf.getInitParameter("org.xml.sax.parser"));         if (log.isLoggable(Level.FINE)) log.trace(ME, "Found system parameter org.xml.sax.parser=" + conf.getInitParameter("org.xml.sax.parser"));      }      else         props.put("org.xml.sax.parser", "org.apache.crimson.parser.Parser2"); // xmlBlaster uses Suns XML parser as default      log.info(ME, "Using system parameter org.xml.sax.parser=" + props.get("org.xml.sax.parser"));      */      if (props.size() > 0) {         System.setProperties(props);      }   }   /**    * @see #writeResponse(HttpServletResponse, String, text)    */   private void writeResponse(HttpServletResponse res, String actionType, String text) throws IOException {      writeResponse(res, actionType, (text==null) ? (Object)null : (Object)text);   }   /**    * Transforms the given text to send it back to the applet.     * <p>    * The actionType and the text are java.io.Serialized and than Base64 encoded.    * </p>    * @param res    * @param actionType A type with the applet knows how to read, "subscribe" etc. for subscribe return QoS    */   private void writeResponse(HttpServletResponse res, String actionType, Object obj) throws IOException {      //this.initialGlobal.getLog("servlet").trace("AppletServlet", "writeResponse actionType=" + actionType + " obj=" + obj.getClass().getName());      ByteArrayOutputStream dump = new ByteArrayOutputStream(1024);      ObjectOutputStreamMicro objectOut = new ObjectOutputStreamMicro(dump);      objectOut.writeObject(actionType); // "subscribe" etc.      if (obj != null) {         objectOut.writeObject(obj);      }      boolean isChunked = false; // All in one line      byte[] base64 = Base64.encodeBase64(dump.toByteArray(), isChunked);      PrintWriter out = res.getWriter();      out.println(new String(base64));      out.flush();   }   /**    * @return The PushHandler of this session, never null    * @exception If no PushHandler exists    */   private PushHandler getPushHandler(HttpServletRequest req) throws XmlBlasterException {      HttpSession session = req.getSession(false);      if (session == null) {         throw new XmlBlasterException(this.initialGlobal, ErrorCode.USER_SECURITY_AUTHENTICATION_ACCESSDENIED, "No servlet session available");      }      String key = "PushHandler"+getParameter(req, "appletInstanceCount", "0");      PushHandler pushHandler = (PushHandler)session.getAttribute(key);      if (pushHandler == null) {         throw new XmlBlasterException(this.initialGlobal, ErrorCode.USER_SECURITY_AUTHENTICATION_ACCESSDENIED, "The PushHandler is missing in the session scope");      }      return pushHandler;   }   /**    * Event fired by Logger.java through interface I_LogListener.    * <p />    * Log output from log.info(); etc. into Servlet log file.    * <p />    * Note that System.err.println("Hello"); will be printed into    * the Apache error log file /var/log/httpd.error_log<br />    * I don't know what other web servers are doing with it.    * <p />    * System.out.println("Hello"); will be printed to the console    * where you started the servlet engine.    */   public void log(LogRecord record) {      getServletContext().log(record.getMessage());   }   /**    * Get the request parameter.     * <br />    * NOTE: Servlet API 2.1 or higher    *    * @param req request from client    * @param name parameter name    * @param defaultVal default value if parameter not found    * @return The value    */   public static final String getParameter(HttpServletRequest req, String name, String defaultVal) {      if (name == null) {         return defaultVal;      }      Object obj = req.getParameter(name);      if (obj != null) {         return (String)obj;      }      return defaultVal;   }   /**    * Get a request attribute, if not found the session is checked, if    * not found again, the given default is returned.     * <br />    * NOTE: Servlet API 2.1 or higher    *    * @param req request from client    * @param name parameter name    * @param defaultVal default value if parameter not found    * @return The value    */   public static final String getAttribute(HttpServletRequest req, String name, String defaultVal) {      if (name == null) {         return defaultVal;      }      Object obj = req.getAttribute(name);      if (obj != null) {         return (String)obj;      }      HttpSession session = req.getSession(false);      if (session == null) {         return defaultVal;      }      obj = session.getAttribute(name);      if (obj != null) {         return (String)obj;      }      return defaultVal;   }   /**    * @see #getParameter(HttpServletRequest, String, String)    */   public static final boolean getParameter(HttpServletRequest req, String name, boolean defaultVal) {      Boolean b = new Boolean(getParameter(req, name, new Boolean(defaultVal).toString()));      return b.booleanValue();   }}

⌨️ 快捷键说明

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