X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2FXMLRPC.java;h=607d34e6f5d3c88d7be088e3add5fe37bc80091e;hb=756db73976080807dea68aa12b34d6485b91abef;hp=6c1699cc3d5c7937aca6f2476a433827f8f7950d;hpb=3591b88b94a6bb378af3d4abe6eb5233ce583104;p=org.ibex.core.git diff --git a/src/org/ibex/XMLRPC.java b/src/org/ibex/XMLRPC.java index 6c1699c..607d34e 100644 --- a/src/org/ibex/XMLRPC.java +++ b/src/org/ibex/XMLRPC.java @@ -31,9 +31,15 @@ import org.bouncycastle.util.encoders.Base64; */ class XMLRPC extends JS { - public XMLRPC(String url, String method) { this(url, method, new HTTP(url)); } - public XMLRPC(String url, String method, HTTP http) { this.http = http; this.url = url; this.method = method; } - public Object get(Object name) { return new XMLRPC(url, (method.equals("") ? "" : method + ".") + name.toString(), http); } + public XMLRPC(String url, String method) { + this.http = url.startsWith("stdio:") ? HTTP.stdio : new HTTP(url); + this.url = url; + this.method = method; + } + public XMLRPC(String url, String method, XMLRPC httpSource) { + this.http = httpSource.http; this.url = url; this.method = method; } + public Object get(Object name) { + return new XMLRPC(url, (method.equals("") ? "" : method + ".") + name.toString(), this); } /** this holds character content as we read it in -- since there is only one per instance, we don't support mixed content */ @@ -165,9 +171,9 @@ class XMLRPC extends JS { content.append("\r\n"); content.append("\n"); content.append(" \n"); - content.append(" "); + content.append(" "); content.append(method); - content.append("\n"); + content.append("\n"); content.append(" \n"); for(int i=0; i\n"); @@ -313,30 +319,30 @@ class XMLRPC extends JS { final void call(final JS.UnpauseCallback callback, final JSArray args) { try { - if (Log.verbose) Log.info(this, "call to " + url + " : " + method); + if (Log.rpc) Log.info(this, "call to " + url + " : " + method); if (tracker == null) tracker = new Hash(); if (objects == null) objects = new Vec(); String request = buildRequest(args); - if (Log.verbose) Log.info(this, "send:\n" + request); + if (Log.rpc) Log.info(this, "send:\n" + request); InputStream is = http.POST("text/xml", request); BufferedReader br = new BufferedReader(new InputStreamReader(is)); try { new Helper().parse(br); final Object result = fault ? new JSExn(objects.elementAt(0)) : objects.size() == 0 ? null : objects.elementAt(0); - Scheduler.add(new Scheduler.Task() { public void perform() throws Exception { callback.unpause(result); }}); + Scheduler.add(new Scheduler.Task() { public void perform() throws JSExn { callback.unpause(result); }}); } finally { tracker.clear(); objects.setSize(0); } } catch (final JSExn e) { final Exception e2 = e; - Scheduler.add(new Scheduler.Task() { public void perform() throws Exception { callback.unpause(e2); }}); + Scheduler.add(new Scheduler.Task() { public void perform() throws JSExn { callback.unpause(e2); }}); } catch (final IOException e) { final Exception e2 = e; - Scheduler.add(new Scheduler.Task() { public void perform() throws Exception { callback.unpause(new JSExn(e2)); }}); + Scheduler.add(new Scheduler.Task() { public void perform() throws JSExn { callback.unpause(new JSExn(e2)); }}); } catch (final XML.Exn e) { final Exception e2 = e; - Scheduler.add(new Scheduler.Task() { public void perform() throws Exception { callback.unpause(new JSExn(e2)); }}); + Scheduler.add(new Scheduler.Task() { public void perform() throws JSExn { callback.unpause(new JSExn(e2)); }}); } } }