📄 xmlscriptaccess.java
字号:
*/ public void initArgs(String[] args) { this.glob.init(args); } /** * Access the handle of this xmlBlaster connection. */ public Global getGlobal() { return this.glob; } /** * Send xml encoded requests to the xmlBlaster server. * @exception All caught exceptions are thrown as RuntimeException * @see <a href="http://www.xmlblaster.org/xmlBlaster/doc/requirements/client.script.html">client.script requirement</a> */ public String sendRequest(String xmlRequest) { try { this.reader = new StringReader(xmlRequest); this.outStream = new ByteArrayOutputStream(); // TODO: Dispatch events: this.interpreter = new XmlScriptClient(this.glob, this.glob.getXmlBlasterAccess(), this, null, this.outStream); this.interpreter.parse(this.reader); return this.outStream.toString(); } catch (XmlBlasterException e) { log.warning("sendRequest failed: " + e.getMessage()); throw new RuntimeException(e.getMessage()); } catch (Exception e) { log.severe("sendRequest failed: " + e.toString()); e.printStackTrace(); throw new RuntimeException(e.toString()); } } /** * Setup the cache mode. * @see org.xmlBlaster.client.I_XmlBlasterAccess#createSynchronousCache(int) * @see <a href="http://www.xmlBlaster.org/xmlBlaster/doc/requirements/client.cache.html">client.cache requirement</a> */ public SynchronousCache createSynchronousCache(int size) { return this.glob.getXmlBlasterAccess().createSynchronousCache(size); } /** * Login to xmlBlaster. * @see org.xmlBlaster.client.I_XmlBlasterAccess#connect(ConnectQos, org.xmlBlaster.client.I_Callback) * @see <a href="http://www.xmlBlaster.org/xmlBlaster/doc/requirements/interface.connect.html">interface.connect requirement</a> */ public ConnectReturnQos connect(String xmlQos) throws XmlBlasterException { ConnectQos qos = new ConnectQos(this.glob, this.glob.getConnectQosFactory().readObject(xmlQos)); return this.glob.getXmlBlasterAccess().connect(qos, this); } /** * Leaves the connection to the server. * The server side resources are not freed if the client has connected fail save * and messages are queued until we login again with the same name and publicSessionId * @see org.xmlBlaster.client.I_XmlBlasterAccess#leaveServer(java.util.Map) */ public void leaveServer() { this.glob.getXmlBlasterAccess().leaveServer(null); } /** * Has the connect() method successfully passed? * @see org.xmlBlaster.client.I_XmlBlasterAccess#isConnected() */ public boolean isConnected() { return this.glob.getXmlBlasterAccess().isConnected(); } /** * If no communication takes place longer the the lifetime of the session * we can refresh the session to avoid auto logout * @see org.xmlBlaster.client.I_XmlBlasterAccess#refreshSession() */ public void refreshSession() throws XmlBlasterException { this.glob.getXmlBlasterAccess().refreshSession(); } /** * Access the callback server which is currently used in I_XmlBlasterAccess. * @see org.xmlBlaster.client.I_XmlBlasterAccess#getCbServer() */ public I_CallbackServer getCbServer() { return this.glob.getXmlBlasterAccess().getCbServer(); } /** * @see org.xmlBlaster.client.I_XmlBlasterAccess#getId() */ public String getId() { return this.glob.getXmlBlasterAccess().getId(); } /** * Logout from the server, free all server and client side resources. * @return false if connect() wasn't called before or if you call disconnect() multiple times * @see org.xmlBlaster.client.I_XmlBlasterAccess#disconnect(DisconnectQos) * @see <a href="http://www.xmlBlaster.org/xmlBlaster/doc/requirements/interface.disconnect.html">interface.disconnect requirement</a> */ public boolean disconnect(String xmlQos) throws XmlBlasterException { DisconnectQos disconnectQos = new DisconnectQos(this.glob, glob.getDisconnectQosFactory().readObject(xmlQos)); return this.glob.getXmlBlasterAccess().disconnect(disconnectQos); } /** * Subscribe to messages. * @param xmlKey Which message topics to retrieve * @param xmlQos Control the behavior and further filter messages with mime based filter plugins * @see org.xmlBlaster.client.I_XmlBlasterAccess#subscribe(SubscribeKey, SubscribeQos, I_Callback) * @exception XmlBlasterException like ErrorCode.USER_NOT_CONNECTED and others */ public SubscribeReturnQos subscribe(String xmlKey, String xmlQos) throws XmlBlasterException { return this.glob.getXmlBlasterAccess().subscribe(xmlKey, xmlQos, null); } /** * Cancel subscription. * @see org.xmlBlaster.client.I_XmlBlasterAccess#unSubscribe(UnSubscribeKey, UnSubscribeQos) * @see <a href="http://www.xmlBlaster.org/xmlBlaster/doc/requirements/interface.unSubscribe.html">interface.unSubscribe requirement</a> */ public UnSubscribeReturnQos[] unSubscribe(String xmlKey, String xmlQos) throws XmlBlasterException { return this.glob.getXmlBlasterAccess().unSubscribe( new UnSubscribeKey(this.glob, this.glob.getQueryKeyFactory().readObject(xmlKey)), new UnSubscribeQos(this.glob, this.glob.getQueryQosFactory().readObject(xmlQos))); } /** * Get synchronous messages. * @param xmlKey Which message topics to retrieve * @param xmlQos Control the behavior and further filter messages with mime based filter plugins * @see <a href="http://www.xmlBlaster.org/xmlBlaster/doc/requirements/interface.get.html">interface.get requirement</a> * @see org.xmlBlaster.client.I_XmlBlasterAccess#get(GetKey, GetQos) * @exception XmlBlasterException like ErrorCode.USER_NOT_CONNECTED and others */ public MsgUnit[] get(String xmlKey, String xmlQos) throws XmlBlasterException { return this.glob.getXmlBlasterAccess().get( new GetKey(this.glob, glob.getQueryKeyFactory().readObject(xmlKey)), new GetQos(this.glob, glob.getQueryQosFactory().readObject(xmlQos))); } /** * @see org.xmlBlaster.client.I_XmlBlasterAccess#getCached(GetKey, GetQos) */ public MsgUnit[] getCached(String xmlKey, String xmlQos) throws XmlBlasterException { return this.glob.getXmlBlasterAccess().getCached( new GetKey(this.glob, glob.getQueryKeyFactory().readObject(xmlKey)), new GetQos(this.glob, glob.getQueryQosFactory().readObject(xmlQos))); } //public PublishReturnQos publish(MsgUnit msgUnit) throws XmlBlasterException { // return this.glob.getXmlBlasterAccess().publish(msgUnit); //} /** * Publish a message. * @param xmlKey The message topic * @param contentStr The payload as a string * @param xmlQos Control the behavior * @see <a href="http://www.xmlBlaster.org/xmlBlaster/doc/requirements/interface.publish.html">interface.publish requirement</a> * @see org.xmlBlaster.client.I_XmlBlasterAccess#publish(org.xmlBlaster.util.MsgUnit) * @exception XmlBlasterException like ErrorCode.USER_NOT_CONNECTED and others */ public PublishReturnQos publishStr(String xmlKey, String contentStr, String xmlQos) throws XmlBlasterException { MsgUnit msgUnit = new MsgUnit(this.glob, xmlKey, contentStr, xmlQos); return this.glob.getXmlBlasterAccess().publish(msgUnit); } /** * Publish a message. * @param xmlKey The message topic * @param content The payload as binary blob * @param xmlQos Control the behavior * @see <a href="http://www.xmlBlaster.org/xmlBlaster/doc/requirements/interface.publish.html">interface.publish requirement</a> * @see org.xmlBlaster.client.I_XmlBlasterAccess#publish(org.xmlBlaster.util.MsgUnit) * @exception XmlBlasterException like ErrorCode.USER_NOT_CONNECTED and others */ public PublishReturnQos publishBlob(String xmlKey, byte[] content, String xmlQos) throws XmlBlasterException { MsgUnit msgUnit = new MsgUnit(this.glob, xmlKey, content, xmlQos); return this.glob.getXmlBlasterAccess().publish(msgUnit); } /** * @see <a href="http://www.xmlBlaster.org/xmlBlaster/doc/requirements/interface.erase.html">interface.erase requirement</a> */ public EraseReturnQos[] erase(String xmlKey, String xmlQos) throws XmlBlasterException { return this.glob.getXmlBlasterAccess().erase( new EraseKey(this.glob, glob.getQueryKeyFactory().readObject(xmlKey)), new EraseQos(this.glob, glob.getQueryQosFactory().readObject(xmlQos))); } /** * Enforced by I_Callback */ public String update(String cbSessionId, UpdateKey updateKey, byte[] content, UpdateQos updateQos) throws XmlBlasterException { if (log.isLoggable(Level.FINER)) log.finer("Callback update arrived: " + updateKey.getOid()); return notifyUpdateEvent(cbSessionId, updateKey, content, updateQos); } /** * Dump state of this client connection handler into an XML ASCII string. * @return internal state */ public String toXml() { return this.glob.getXmlBlasterAccess().toXml(); } /** * For testing: java org.xmlBlaster.client.activex.XmlScriptAccess */ public static void main(String args[]) { try { final XmlScriptAccess access = new XmlScriptAccess(); //access.activateUpdateConsumer(true); Properties props = access.createPropertiesInstance(); props.put("protocol", "SOCKET"); //props.put("trace", "true"); access.initialize(props); class TestUpdateListener implements UpdateListener { public void update(UpdateEvent updateEvent) { System.out.println("TestUpdateListener.update: " + updateEvent.getKey()); access.setUpdateReturn("<qos><state id='OK'/></qos>"); } } TestUpdateListener listener = new TestUpdateListener(); access.addUpdateListener(listener); String request = "<xmlBlaster>" + " <connect/>" + " <subscribe><key oid='test'></key><qos/></subscribe>" + " <publish>" + " <key oid='test'><airport name='london'/></key>" + " <content>This is a simple script test</content>" + " <qos/>" + " </publish>" + " <wait delay='1000'/>" + "</xmlBlaster>"; String response = access.sendRequest(request); System.out.println("Response is: " + response); //UpdateMsgUnit[] msgs = access.consumeUdateMessages(); //for(int i=0; i<msgs.length; i++) { // System.out.println("Access queued update message '" + msgs[i].getUpdateKey().toXml() + "'"); //} //msgs = access.consumeUdateMessages(); //if (msgs.length != 0) // System.out.println("ERROR: queued update message not consumed properly"); System.out.println("***** Publishing ..."); PublishReturnQos ret = access.publishStr("<key oid='test'/>", "Bla", "<qos/>"); System.out.println("***** Published message ret=" + ret.getState()); Thread.sleep(2000); response = access.sendRequest("<xmlBlaster>disconnect/></xmlBlaster>"); } catch (Throwable e) { System.out.println("ERROR: Caught exception: " + e.toString()); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -