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 + -
显示快捷键?