if (log.isLoggable(Level.FINE)) log.fine("Subscribed to " + key + ": SubscriptionId=" + ret.getSubscriptionId() + " qos=" + qos + " returnObject=" + returnObject.getClass().getName());
}
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);
}
}
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());