From 513563fd5addc3f5d286fea127aff70856942104 Mon Sep 17 00:00:00 2001 From: megacz Date: Fri, 30 Jan 2004 06:49:49 +0000 Subject: [PATCH] 2002/08/07 04:59:13 darcs-hash:20040130064949-2ba56-83788993ee7ebb2fdb9cc5f464c4471e0e301a18.gz --- CHANGES | 2 ++ src/org/xwt/XMLRPC.java | 72 ++++++++++++++++++++++------------------------- 2 files changed, 36 insertions(+), 38 deletions(-) diff --git a/CHANGES b/CHANGES index 89c1280..a498193 100644 --- a/CHANGES +++ b/CHANGES @@ -348,4 +348,6 @@ 06-Jul megacz XWT.java: encodeURI, decodeURI, new HTTP stack, calling newBox in the foreground thread is deprecated. +06-Jul megacz XMLRPC.java: new HTTP stack, better verbose output + diff --git a/src/org/xwt/XMLRPC.java b/src/org/xwt/XMLRPC.java index 7f5355b..d70dd7c 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,32 @@ 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) Log.log(this, "send: " + content); + + 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) if (Log.on) 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 +375,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; } -- 1.7.10.4