X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2FSOAP.java;h=f3ce759de97ccb361e22425b6183af7c02293c23;hb=7e9239a7088d4cd772a31a76e1a53e1c681638bc;hp=a36e9a986538153d5a1f1a93d50008d4253fae48;hpb=1296555e827bcd7606b7d82b6c1f2a875ff22e2c;p=org.ibex.core.git diff --git a/src/org/xwt/SOAP.java b/src/org/xwt/SOAP.java index a36e9a9..f3ce759 100644 --- a/src/org/xwt/SOAP.java +++ b/src/org/xwt/SOAP.java @@ -1,10 +1,10 @@ -// Copyright 2002 Adam Megacz, see the COPYING file for licensing [GPL] +// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL] package org.xwt; import java.io.*; import java.net.*; import java.util.*; -import org.mozilla.javascript.*; +import org.xwt.js.*; import org.xwt.util.*; import org.bouncycastle.util.encoders.Base64; @@ -28,8 +28,8 @@ class SOAP extends XMLRPC { String nameSpace = null; /** When you get a property from an SOAP, it just returns another SOAP with the property name tacked onto methodname. */ - public Object get(String name, Scriptable start) { - return new SOAP(url.toString(), (methodname.equals("") ? "" : methodname + ".") + name, action, nameSpace); + public Object get(String name) { + return new SOAP(url.toString(), (method.equals("") ? "" : method + ".") + name, http, action, nameSpace); } @@ -41,9 +41,9 @@ class SOAP extends XMLRPC { if (name.equals("SOAP-ENV:Envelope")) return; if (name.equals("SOAP-ENV:Body")) return; if (name.equals("SOAP-ENV:Fault")) fault = true; - + // add a generic struct; we'll change this if our type is different - objects.addElement(new JSObject(false)); + objects.addElement(new JS()); for(int i=0; io to sb */ - void appendObject(String name, Object o, StringBuffer sb) throws JavaScriptException { + void appendObject(String name, Object o, StringBuffer sb) throws JSExn { if (o instanceof Number) { if ((double)((Number)o).intValue() == ((Number)o).doubleValue()) { sb.append(" <" + name + " xsi:type=\"xsd:int\">"); sb.append(((Number)o).intValue()); - sb.append("\n"); + sb.append("\r\n"); } else { sb.append(" <" + name + " xsi:type=\"xsd:double\">"); sb.append(o); - sb.append("\n"); + sb.append("\r\n"); } } else if (o instanceof Boolean) { sb.append(" <" + name + " xsi:type=\"xsd:boolean\">"); sb.append(((Boolean)o).booleanValue() ? "true" : "false"); - sb.append("\n"); + sb.append("\r\n"); - } else if (o instanceof ByteStream) { + } else if (o instanceof Stream) { try { - sb.append(" <" + name + " xsi:type=\"SOAP-ENC:base64\">\n"); - InputStream is = ((ByteStream)o).getInputStream(); + sb.append(" <" + name + " xsi:type=\"SOAP-ENC:base64\">\r\n"); + InputStream is = ((Stream)o).getInputStream(); byte[] buf = new byte[54]; while(true) { int numread = is.read(buf, 0, 54); @@ -192,14 +196,14 @@ class SOAP extends XMLRPC { } sb.append(" "); sb.append(new String(Base64.encode(writebuf))); - sb.append("\n"); + sb.append("\r\n"); } sb.append(((Boolean)o).booleanValue() ? "1" : "0"); - sb.append("\n"); + sb.append("\r\n"); } catch (IOException e) { - if (Log.on) Log.log(this, "caught IOException while attempting to send a ByteStream via SOAP"); - if (Log.on) Log.log(this, e); - throw new JavaScriptException("caught IOException while attempting to send a ByteStream via SOAP"); + if (Log.on) Log.info(this, "caught IOException while attempting to send a ByteStream via SOAP"); + if (Log.on) Log.info(this, e); + throw new JSExn("caught IOException while attempting to send a ByteStream via SOAP"); } } else if (o instanceof String) { @@ -219,51 +223,58 @@ class SOAP extends XMLRPC { i = oldi = i + 1; } } - sb.append("\n"); + sb.append("\r\n"); - } else if (o instanceof NativeArray) { - NativeArray na = (NativeArray)o; - sb.append(" <" + name + " SOAP-ENC:arrayType=\"xsd:ur-type[" + na.jsGet_length() + "]\">"); - for(int i=0; i\n"); + } else if (o instanceof JSArray) { + JSArray a = (JSArray)o; + sb.append(" <" + name + " SOAP-ENC:arrayType=\"xsd:ur-type[" + a.length() + "]\">"); + for(int i=0; i\r\n"); - } else if (o instanceof Scriptable && !(o instanceof Undefined)) { - Scriptable s = (Scriptable)o; + } else if (o instanceof JS) { + JS j = (JS)o; sb.append(" <" + name + ">"); - Object[] ids = s.getIds(); - for(int i=0; i\n"); + Enumeration e = j.keys(); + while(e.hasMoreElements()) { + Object key = e.nextElement(); + appendObject((String)key, j.get(key), sb); + } + sb.append("\r\n"); + } } - protected String send(Object[] args, HTTP http) throws JavaScriptException, IOException { + protected String buildRequest(JSArray args) throws JSExn, IOException { // build up the request StringBuffer content = new StringBuffer(); - content.append("\n"); - content.append("\n"); - content.append("\n"); + content.append("SOAPAction: " + action + "\r\n\r\n"); + content.append("\r\n"); + content.append("\r\n"); + content.append("\r\n"); content.append(" <"); - content.append(methodname); + content.append(method); content.append(nameSpace != null ? " xmlns=\"" + nameSpace + "\"" : ""); - content.append(">\n"); - if (args.length > 0) { - Object[] o = ((Scriptable)args[0]).getIds(); - for(int i=0; i\r\n"); + if (args.length() > 0) { + Enumeration e = ((JS)args.elementAt(0)).keys(); + while(e.hasMoreElements()) { + Object key = e.nextElement(); + appendObject((String)key, ((JS)args.elementAt(0)).get(key), content); + } } - content.append(" "); - http.addHeader("SOAPAction", action); + content.append(" \r\n"); return content.toString(); } SOAP(String url, String methodname, String action, String nameSpace) { - super(url, methodname); + this(url, methodname, new HTTP(url), action, nameSpace); + } + SOAP(String url, String methodname, HTTP http, String action, String nameSpace) { + super(url, methodname, http); this.action = action; this.nameSpace = nameSpace; }