package org.ibex.js;
import java.io.*;
-import java.util.*;
-import org.ibex.net.*;
import org.ibex.util.*;
-import org.ibex.crypto.*;
/**
* A partial RPC-style SOAP 1.1 client. Implemented from the SOAP 1.1
if (name.equals("SOAP-ENV:Fault")) fault = true;
// add a generic struct; we'll change this if our type is different
- objects.addElement(new JS.O());
+ objects.push(new JS.Obj());
for(int i=0; i<keys.length; i++) {
String key = keys[i];
String value = vals[i].toString();
if (key.endsWith("ype")) {
if (value.endsWith("boolean")) {
- objects.removeElementAt(objects.size() - 1);
- objects.addElement(Script.B(true));
+ objects.pop();
+ objects.push(Script.B(true));
} else if (value.endsWith("int")) {
- objects.removeElementAt(objects.size() - 1);
- objects.addElement(Script.N(0));
+ objects.pop();
+ objects.push(Script.N(0));
} else if (value.endsWith("double")) {
- objects.removeElementAt(objects.size() - 1);
- objects.addElement(Script.N(0.0));
+ objects.pop();
+ objects.push(Script.N(0.0));
} else if (value.endsWith("string")) {
- objects.removeElementAt(objects.size() - 1);
- objects.addElement(Script.S(""));
+ objects.pop();
+ objects.push(Script.S(""));
} else if (value.endsWith("base64")) {
- objects.removeElementAt(objects.size() - 1);
- objects.addElement(new byte[] { });
+ objects.pop();
+ objects.push(new byte[] { });
} else if (value.endsWith("null")) {
- objects.removeElementAt(objects.size() - 1);
- objects.addElement(null);
+ objects.pop();
+ objects.push(null);
} else if (value.endsWith("arrayType") || value.endsWith("JSArray") || key.endsWith("arrayType")) {
- objects.removeElementAt(objects.size() - 1);
- objects.addElement(new JSArray());
+ objects.pop();
+ objects.push(new JSArray());
}
}
}
if (content.size() > 0 && content.toString().trim().length() > 0) {
// remove ourselves
- Object me = objects.elementAt(objects.size() - 1);
+ Object me = objects.get(objects.size() - 1);
if (fault || me instanceof String) {
- objects.removeElementAt(objects.size() - 1);
- objects.addElement(new String(content.getBuf(), 0, content.size()).intern());
+ objects.pop();
+ objects.push(new String(content.buf, 0, content.size()).intern());
content.reset();
} else if (me instanceof byte[]) {
- objects.removeElementAt(objects.size() - 1);
- objects.addElement(new Fountain.ByteArray(Base64.decode(new String(content.getBuf(), 0, content.size())), null));
+ objects.pop();
+ objects.push(new Fountain.ByteArray(Encode.fromBase64(new String(content.buf, 0, content.size())), null));
content.reset();
} else if (me instanceof Integer) {
- objects.removeElementAt(objects.size() - 1);
- objects.addElement(new Integer(new String(content.getBuf(), 0, content.size())));
+ objects.pop();
+ objects.push(new Integer(new String(content.buf, 0, content.size())));
content.reset();
} else if (me instanceof Boolean) {
- objects.removeElementAt(objects.size() - 1);
- String s = new String(content.getBuf(), 0, content.size()).trim();
- if (s.equals("1") || s.equals("true")) objects.addElement(Boolean.TRUE);
- else objects.addElement(Boolean.FALSE);
+ objects.pop();
+ String s = new String(content.buf, 0, content.size()).trim();
+ if (s.equals("1") || s.equals("true")) objects.push(Boolean.TRUE);
+ else objects.push(Boolean.FALSE);
content.reset();
} else if (me instanceof Double) {
- objects.removeElementAt(objects.size() - 1);
- objects.addElement(new Double(new String(content.getBuf(), 0, content.size())));
+ objects.pop();
+ objects.push(new Double(new String(content.buf, 0, content.size())));
content.reset();
} else {
// okay, we got PCDATA for what is supposedly a
// struct... somebody's not adding their type info...
- String s = new String(content.getBuf(), 0, content.size()).trim();
+ String s = new String(content.buf, 0, content.size()).trim();
boolean hasdot = false;
for(int i=0; i<s.length(); i++) {
if (s.charAt(i) == '.') hasdot = true;
if (!Character.isDigit(s.charAt(i))) {
- objects.removeElementAt(objects.size() - 1);
- objects.addElement(s);
+ objects.pop();
+ objects.push(s);
return;
}
}
if (hasdot) {
- objects.removeElementAt(objects.size() - 1);
- objects.addElement(new Double(s));
+ objects.pop();
+ objects.push(new Double(s));
} else {
- objects.removeElementAt(objects.size() - 1);
- objects.addElement(new Integer(s));
+ objects.pop();
+ objects.push(new Integer(s));
}
content.reset();
}
}
// remove ourselves
- JS me = (JS)objects.elementAt(objects.size() - 1);
+ JS me = (JS)objects.get(objects.size() - 1);
// find our parent
- JS parent = objects.size() > 1 ? (JS)objects.elementAt(objects.size() - 2) : (JS)null;
+ JS parent = objects.size() > 1 ? (JS)objects.get(objects.size() - 2) : (JS)null;
// we want to fold stuff back into the fault object
if (objects.size() < 2) return;
// our parent "should" be an aggregate type -- add ourselves to it.
if (parent != null && parent instanceof JSArray) {
- objects.removeElementAt(objects.size() - 1);
- ((JSArray)parent).addElement(me);
+ objects.pop();
+ ((JSArray)parent).push(me);
} else if (parent != null && parent instanceof JS) {
- objects.removeElementAt(objects.size() - 1);
+ objects.pop();
try {
((JS)parent).put(Script.S(name), me);
} catch (JSExn e) {
System.arraycopy(buf, 0, writebuf, 0, numread);
}
sb.append(" ");
- sb.append(new String(Base64.encode(writebuf)));
+ sb.append(new String(Encode.toBase64(writebuf)));
sb.append("\r\n");
}
sb.append(((Boolean)o).booleanValue() ? "1" : "0");
} 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<a.length(); i++) appendObject("item", a.elementAt(i), sb);
+ sb.append(" <" + name + " SOAP-ENC:arrayType=\"xsd:ur-type[" + a.size() + "]\">");
+ for(int i=0; i<a.size(); i++) appendObject("item", a.get(i), sb);
sb.append("</" + name + ">\r\n");
} else if (o instanceof JS) {
JS j = (JS)o;
sb.append(" <" + name + ">");
- Enumeration e = j.keys();
- while(e.hasMoreElements()) {
- Object key = e.nextElement();
+ JS.Enumeration e = j.keys();
+ while(e.hasNext()) {
+ Object key = e.next();
appendObject((String)key, j.get((JS)key), sb);
}
sb.append("</" + name + ">\r\n");
content.append(method);
content.append(nameSpace != null ? " xmlns=\"" + nameSpace + "\"" : "");
content.append(">\r\n");
- if (args.length() > 0) {
- Enumeration e = ((JS)args.elementAt(0)).keys();
- while(e.hasMoreElements()) {
- JS key = (JS)e.nextElement();
- appendObject(((JSString)key).coerceToString(), ((JS)args.elementAt(0)).get(key), content);
+ if (args.size() > 0) {
+ JS.Enumeration e = ((JS)args.get(0)).keys();
+ while(e.hasNext()) {
+ JS key = (JS)e.next();
+ appendObject(((JSString)key).coerceToString(), ((JS)args.get(0)).get(key), content);
}
}
content.append(" </" + method + "></SOAP-ENV:Body></SOAP-ENV:Envelope>\r\n");