* convert.
* </ol>
*/
-class XMLRPC extends JS.Callable {
-
- public Object[] keys() { throw new Error("not implemented"); }
+class XMLRPC extends JSCallable {
/** the url to connect to */
protected String url = null;
*
* If an <array> tag is encountered, a null is pushed onto the
* stack. When a </data> is encountered, we search back on the
- * stack to the last null, replace it with a NativeJS.Array, and
+ * stack to the last null, replace it with a NativeJSArray, and
* insert into it all elements above it on the stack.
*
* If a <struct> tag is encountered, a JSObject is pushed
public void startElement(XML.Element c) {
content.reset();
if (c.localName.equals("fault")) fault = true;
- else if (c.localName.equals("struct")) objects.setElementAt(new JS.Obj(), objects.size() - 1);
+ else if (c.localName.equals("struct")) objects.setElementAt(new JSObj(), objects.size() - 1);
else if (c.localName.equals("array")) objects.setElementAt(null, objects.size() - 1);
else if (c.localName.equals("value")) objects.addElement("");
}
if (i > 0) s = s.substring(i);
try {
- org.xwt.js.Date nd = new org.xwt.js.Date();
- double date = org.xwt.js.Date.date_msecFromDate(Double.valueOf(s.substring(0, 4)).doubleValue(),
+ JSDate nd = new JSDate();
+ double date = JSDate.date_msecFromDate(Double.valueOf(s.substring(0, 4)).doubleValue(),
Double.valueOf(s.substring(4, 6)).doubleValue() - 1,
Double.valueOf(s.substring(6, 8)).doubleValue(),
Double.valueOf(s.substring(9, 11)).doubleValue(),
Double.valueOf(s.substring(15, 17)).doubleValue(),
(double)0
);
- nd.jsFunction_setTime(org.xwt.js.Date.internalUTC(date));
+ nd.jsJSFunction_setTime(JSDate.internalUTC(date));
objects.setElementAt(nd, objects.size() - 1);
} catch (Exception e) {
} else if (c.localName.equals("data")) {
int i;
for(i=objects.size() - 1; objects.elementAt(i) != null; i--);
- JS.Array arr = new JS.Array();
+ JSArray arr = new JSArray();
for(int j = i + 1; j<objects.size(); j++) arr.put(new Integer(j - i - 1), objects.elementAt(j));
objects.setElementAt(arr, i);
objects.setSize(i + 1);
}
sb.append("</string></value>\n");
- } else if (o instanceof org.xwt.js.Date) {
+ } else if (o instanceof JSDate) {
sb.append(" <value><dateTime.iso8601>");
- java.util.Date d = new java.util.Date(((org.xwt.js.Date)o).getRawTime());
+ java.util.Date d = new java.util.Date(((JSDate)o).getRawTime());
sb.append(d.getYear() + 1900);
if (d.getMonth() + 1 < 10) sb.append('0');
sb.append(d.getMonth() + 1);
sb.append(d.getSeconds());
sb.append("</dateTime.iso8601></value>\n");
- } else if (o instanceof JS.Array) {
+ } else if (o instanceof JSArray) {
if (tracker.get(o) != null) throw new JS.Exn("attempted to send multi-ref data structure via XML-RPC");
tracker.put(o, Boolean.TRUE);
sb.append(" <value><array><data>\n");
- JS.Array a = (JS.Array)o;
+ JSArray a = (JSArray)o;
for(int i=0; i<a.length(); i++) appendObject(a.elementAt(i), sb);
sb.append(" </data></array></value>\n");
tracker.put(o, Boolean.TRUE);
JS j = (JS)o;
sb.append(" <value><struct>\n");
- Object[] ids = j.keys();
- for(int i=0; i<ids.length; i++) {
- sb.append(" <member><name>" + ids[i] + "</name>\n");
- appendObject(j.get(ids[i].toString()), sb);
+ Enumeration e = j.keys();
+ while(e.hasMoreElements()) {
+ Object key = e.nextElement();
+ sb.append(" <member><name>" + key + "</name>\n");
+ appendObject(j.get(key), sb);
sb.append(" </member>\n");
}
sb.append(" </struct></value>\n");
}
}
- // this is synchronized in case multiple threads try to make a call on the same object... in the future, change this
- // behavior to use pipelining.
- public synchronized Object call2(JS.Array args) throws JS.Exn, IOException {
+ public Object call_(JSArray args) throws JS.Exn, IOException {
if (Log.verbose) Log.log(this, "call to " + url + " : " + methodname);
if (tracker == null) tracker = new Hash();
if (objects == null) objects = new Vec();
else objects.setSize(0);
- String content = send(args, http);
+ final String content = send(args, http);
if (Log.verbose) {
String s;
BufferedReader br2 = new BufferedReader(new StringReader(content));
return ret;
}
});
- return recieve(br);
+ return null;
} finally {
is.close();
}
}
- protected String send(JS.Array args, HTTP http) throws JS.Exn, IOException {
+ protected String send(JSArray args, HTTP http) throws JS.Exn, IOException {
StringBuffer content = new StringBuffer();
content.append("\r\n");
content.append("<?xml version=\"1.0\"?>\n");
return objects.elementAt(0);
}
- public final Object call(final JS.Array args) throws JS.Exn {
- final JS.Context cx = JS.Context.current();
- Scheduler.add(new Scheduler.Task() { public void perform() {
- Object ret;
- try {
- ret = call2(args);
- } catch (IOException se) {
- if (Log.on) Log.log(this, se);
- throw new JS.Exn("socket exception: " + se);
- }
- cx.resume(ret);
- } });
- return JS.Context.pause;
+ public final Object call(final JSArray args) throws JS.Exn {
+ final Callback callback = JSContext.pause();
+ new java.lang.Thread() {
+ public void run() {
+ try {
+ final Object ret = call_(args);
+ Scheduler.add(new Scheduler.Task() { public void perform() { callback.call(ret); } });
+ } catch (IOException se) {
+ if (Log.on) Log.log(this, se);
+ throw new JS.Exn("socket exception: " + se);
+ }
+ } }.start();
+ return null;
}
/** When you get a property from an XMLRPC, it just returns another XMLRPC with the property name tacked onto methodname. */