X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2FXMLRPC.java;h=6b95b4d947d839c33cf8546ac3d67149828a8bac;hb=78fe92d1a18e04584c782ea75e69e3e1c8fbbce7;hp=7f5355b030b33e42eb46476b208c516080efc782;hpb=a1c5591968de1f1aff5fdd497e0410a77b6281d3;p=org.ibex.core.git diff --git a/src/org/xwt/XMLRPC.java b/src/org/xwt/XMLRPC.java index 7f5355b..6b95b4d 100644 --- a/src/org/xwt/XMLRPC.java +++ b/src/org/xwt/XMLRPC.java @@ -41,6 +41,9 @@ class XMLRPC extends XML implements Function { /** this holds character content as we read it in -- since there is only one per instance, we don't support mixed content */ protected AccessibleCharArrayWriter content = new AccessibleCharArrayWriter(100); + /** the HTTP connection to use */ + protected HTTP http = null; + /** The object stack. As we process xml elements, pieces of the * return value are pushed onto and popped off of this stack. * @@ -286,44 +289,36 @@ class XMLRPC extends XML implements Function { if (objects == null) objects = new Vec(); else objects.setSize(0); - HTTP http = new HTTP(url); String content = send(args, http); - OutputStream os = new BufferedOutputStream(http.getOutputStream(content.length(), "text/xml"), 4000); - PrintWriter ps = !Log.verbose ? - new PrintWriter(os) : - new PrintWriter(new FilterWriter(new OutputStreamWriter(os)) { - public void write(int i) throws IOException { - super.write(i); - if (Log.on) Log.log(this, "send: " + ((char)i)); - } - public void write(String s, int start, int len) throws IOException { - super.write(s, start, len); - if (Log.on) Log.log(this, "send: " + s.substring(start, start + len)); - } - public void write(char[] c, int start, int len) throws IOException { - super.write(c, start, len); - if (Log.on) Log.log(this, "send: " + new String(c, start, len)); - } - }); - ps.print(content.toString()); - ps.flush(); - - BufferedReader br = !Log.verbose ? - new BufferedReader(new InputStreamReader(new Filter(http.getInputStream()))) : - new BufferedReader(new FilterReader(new InputStreamReader(new Filter(http.getInputStream()))) { - public int read() throws IOException { - int i = super.read(); - if (Log.on) Log.log(this, "recv: " + ((char)i)); - return i; - } - public int read(char[] c, int off, int len) throws IOException { - int ret = super.read(c, off, len); - if (ret == -1) return ret; - if (Log.on) Log.log(this, "recv: " + new String(c, off, ret)); - return ret; - } - }); - return recieve(br); + if (Log.verbose) { + String s; + BufferedReader br2 = new BufferedReader(new StringReader(content)); + while ((s = br2.readLine()) != null) Log.log(this, "send: " + s); + } + + HTTP.HTTPInputStream is = http.POST("text/xml", content); + try { + BufferedReader br = !Log.verbose ? + new BufferedReader(new InputStreamReader(new Filter(is))) : + new BufferedReader(new FilterReader(new InputStreamReader(new Filter(is))) { + public int read() throws IOException { + int i = super.read(); + if (Log.on) Log.log(this, "recv: " + ((char)i)); + return i; + } + public int read(char[] c, int off, int len) throws IOException { + int ret = super.read(c, off, len); + if (ret == -1) return ret; + String s; + BufferedReader br2 = new BufferedReader(new StringReader(new String(c, off, ret))); + while ((s = br2.readLine()) != null) Log.log(this, "recv: " + s); + return ret; + } + }); + return recieve(br); + } finally { + is.close(); + } } protected String send(Object[] args, HTTP http) throws JavaScriptException, IOException { @@ -384,10 +379,15 @@ class XMLRPC extends XML implements Function { /** When you get a property from an XMLRPC, it just returns another XMLRPC with the property name tacked onto methodname. */ public Object get(String name, Scriptable start) { - return new XMLRPC(url, (methodname.equals("") ? "" : methodname + ".") + name); + return new XMLRPC(url, (methodname.equals("") ? "" : methodname + ".") + name, http); } public XMLRPC(String url, String methodname) { + this(url, methodname, new HTTP(url)); + } + + public XMLRPC(String url, String methodname, HTTP http) { + this.http = http; this.url = url; this.methodname = methodname; }