X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2FXMLRPC.java;h=efcccf7532019ceb8cecec6423f2318461ad91c6;hb=8c1756ef3fd42cc2f324baf47e13a83f51045efe;hp=ac8324991b30fe8031071015b010ac7a50293ca8;hpb=6a96430e10e27fc1de5754cb5add705f929dd109;p=org.ibex.core.git diff --git a/src/org/xwt/XMLRPC.java b/src/org/xwt/XMLRPC.java index ac83249..efcccf7 100644 --- a/src/org/xwt/XMLRPC.java +++ b/src/org/xwt/XMLRPC.java @@ -30,9 +30,7 @@ import org.bouncycastle.util.encoders.Base64; * convert. * */ -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; @@ -57,10 +55,10 @@ class XMLRPC extends JS.Callable { * * 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 + * If a <struct> tag is encountered, a JSect is pushed * onto the stack. If a <name> tag is encountered, its CDATA is * pushed onto the stack. When a </member> is encountered, the * name (second element on stack) and value (top of stack) are @@ -84,7 +82,7 @@ class XMLRPC extends JS.Callable { 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 JS(), objects.size() - 1); else if (c.localName.equals("array")) objects.setElementAt(null, objects.size() - 1); else if (c.localName.equals("value")) objects.addElement(""); } @@ -104,7 +102,7 @@ class XMLRPC extends JS.Callable { objects.setElementAt(new Double(new String(content.getBuf(), 0, content.size())), objects.size() - 1); else if (c.localName.equals("base64")) - objects.setElementAt(new Res.ByteArray(Base64.decode(new String(content.getBuf(), 0, content.size()))), objects.size() - 1); + objects.setElementAt(new Res.ByteArray(Base64.decode(new String(content.getBuf(), 0, content.size())), null), objects.size() - 1); else if (c.localName.equals("name")) objects.addElement(new String(content.getBuf(), 0, content.size())); @@ -121,8 +119,8 @@ class XMLRPC extends JS.Callable { 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(), @@ -130,7 +128,7 @@ class XMLRPC extends JS.Callable { Double.valueOf(s.substring(15, 17)).doubleValue(), (double)0 ); - nd.jsFunction_setTime(org.xwt.js.Date.internalUTC(date)); + nd.setTime(JSDate.internalUTC(date)); objects.setElementAt(nd, objects.size() - 1); } catch (Exception e) { @@ -148,7 +146,7 @@ class XMLRPC extends JS.Callable { } 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\n"); - } else if (o instanceof org.xwt.js.Date) { + } else if (o instanceof JSDate) { sb.append(" "); - 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); @@ -256,11 +254,11 @@ class XMLRPC extends JS.Callable { sb.append(d.getSeconds()); sb.append("\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(" \n"); - JS.Array a = (JS.Array)o; + JSArray a = (JSArray)o; for(int i=0; i\n"); @@ -269,10 +267,11 @@ class XMLRPC extends JS.Callable { tracker.put(o, Boolean.TRUE); JS j = (JS)o; sb.append(" \n"); - Object[] ids = j.keys(); - for(int i=0; i" + ids[i] + "\n"); - appendObject(j.get(ids[i].toString()), sb); + Enumeration e = j.keys(); + while(e.hasMoreElements()) { + Object key = e.nextElement(); + sb.append(" " + key + "\n"); + appendObject(j.get(key), sb); sb.append(" \n"); } sb.append(" \n"); @@ -283,9 +282,7 @@ class XMLRPC extends JS.Callable { } } - // 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(); @@ -294,7 +291,7 @@ class XMLRPC extends JS.Callable { 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)); @@ -320,13 +317,13 @@ class XMLRPC extends JS.Callable { 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("\n"); @@ -359,17 +356,24 @@ class XMLRPC extends JS.Callable { return objects.elementAt(0); } - public final Object call(JS.Array args) throws JS.Exn { - try { - return call2(args); - } catch (IOException se) { - if (Log.on) Log.log(this, se); - throw new JS.Exn("socket exception: " + se); - - } catch (JS.Exn jse) { - if (Log.on) Log.log(this, jse.toString()); - throw jse; - } + public final Object call(Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JS.Exn { + JSArray args = new JSArray(); + for(int i=0; i