X-Git-Url: http://git.megacz.com/?p=org.ibex.core.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fnet%2FSOAP.java;fp=src%2Forg%2Fibex%2Fnet%2FSOAP.java;h=0000000000000000000000000000000000000000;hp=d54ebce9a77d1fe0d42db7735b049806f3048f22;hb=ac84b5a03467c0853c7275105712ece6c71be1f1;hpb=3f8aa5300e178e8975b0edc896a5a9d303e7bdf3 diff --git a/src/org/ibex/net/SOAP.java b/src/org/ibex/net/SOAP.java deleted file mode 100644 index d54ebce..0000000 --- a/src/org/ibex/net/SOAP.java +++ /dev/null @@ -1,285 +0,0 @@ -// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL] -package org.ibex.net; - -import java.io.*; -import java.util.*; -import org.ibex.js.*; -import org.ibex.util.*; -import org.ibex.crypto.*; - -/** - * A partial RPC-style SOAP 1.1 client. Implemented from the SOAP 1.1 - * Spec and Dave Winer's "SOAP for Busy Developers". This class - * extends XMLRPC in order to share some networking logic. - * - * Currently unsupported features/hacks: - * - */ -public class SOAP extends XMLRPC { - - /** the desired content of the SOAPAction header */ - String action = null; - - /** the namespace to use */ - 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(Object name) { - return new SOAP(url, (method.equals("") ? "" : method + ".") + name.toString(), this, action, nameSpace); } - - - // Methods to Recieve and parse SOAP Responses //////////////////////////////////////////////////// - - public void startElement(String name, String[] keys, Object[] vals, int line, int col) { - - content.reset(); - 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 JS.O()); - - for(int i=0; i 0 && content.toString().trim().length() > 0) { - - // remove ourselves - Object me = objects.elementAt(objects.size() - 1); - - if (fault || me instanceof String) { - objects.removeElementAt(objects.size() - 1); - objects.addElement(new String(content.getBuf(), 0, content.size()).intern()); - content.reset(); - - } else if (me instanceof byte[]) { - objects.removeElementAt(objects.size() - 1); - objects.addElement(new Stream.ByteArray(Base64.decode(new String(content.getBuf(), 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()))); - 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); - content.reset(); - - } else if (me instanceof Double) { - objects.removeElementAt(objects.size() - 1); - objects.addElement(new Double(new String(content.getBuf(), 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(); - boolean hasdot = false; - for(int i=0; i 1 ? objects.elementAt(objects.size() - 2) : 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. - // FIXME: Can we get away without JSArray being public? - /*if (parent != null && parent instanceof JSArray) { - objects.removeElementAt(objects.size() - 1); - ((JSArray)parent).addElement(me); - - } else */ if (parent != null && parent instanceof JS) { - objects.removeElementAt(objects.size() - 1); - try { - ((JS)parent).put(JS.S(name), me); - } catch (JSExn e) { - throw new Error("this should never happen"); - } - - } - - } - - /** Appends the SOAP representation of o to sb */ - void appendObject(String name, JS o, StringBuffer sb) throws JSExn { - // JS:FIXME: Update for new api - /* - 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("\r\n"); - } else { - sb.append(" <" + name + " xsi:type=\"xsd:double\">"); - sb.append(o); - 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("\r\n"); - - } else if (o instanceof Stream) { - try { - 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); - if (numread == -1) break; - byte[] writebuf = buf; - if (numread < buf.length) { - writebuf = new byte[numread]; - System.arraycopy(buf, 0, writebuf, 0, numread); - } - sb.append(" "); - sb.append(new String(Base64.encode(writebuf))); - sb.append("\r\n"); - } - sb.append(((Boolean)o).booleanValue() ? "1" : "0"); - sb.append("\r\n"); - } catch (IOException e) { - 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) { - sb.append(" <" + name + " xsi:type=\"xsd:string\">"); - String s = (String)o; - if (s.indexOf('<') == -1 && s.indexOf('&') == -1) { - sb.append(s); - } else { - char[] cbuf = s.toCharArray(); - while(true) { - int oldi = 0, i=0; - while(i < cbuf.length && cbuf[i] != '<' && cbuf[i] != '&') i++; - sb.append(cbuf, oldi, i); - if (i == cbuf.length) break; - if (cbuf[i] == '<') sb.append("<"); - else if (cbuf[i] == '&') sb.append("&"); - i = oldi = i + 1; - } - } - sb.append("\r\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 JS) { - JS j = (JS)o; - sb.append(" <" + name + ">"); - Enumeration e = j.keys(); - while(e.hasMoreElements()) { - Object key = e.nextElement(); - appendObject((String)key, j.get(key), sb); - } - sb.append("\r\n"); - - }*/ - } - - protected String buildRequest(JS[] args) throws JSExn, IOException { - // build up the request - StringBuffer content = new StringBuffer(); - content.append("SOAPAction: " + action + "\r\n\r\n"); - content.append("\r\n"); - content.append("\r\n"); - content.append("\r\n"); - content.append(" <"); - content.append(method); - content.append(nameSpace != null ? " xmlns=\"" + nameSpace + "\"" : ""); - content.append(">\r\n"); - if (args.length > 0) { - Enumeration e = args[0].keys(); - while(e.hasMoreElements()) { - JS key = e.nextElement(); - appendObject(JS.toString(key), args[0].get(key), content); - } - } - content.append(" \r\n"); - return content.toString(); - } - - public SOAP(String url, String methodname, String action, String nameSpace) { - super(url, methodname); - this.action = action; - this.nameSpace = nameSpace; - } - public SOAP(String url, String methodname, SOAP httpSource, String action, String nameSpace) { - super(url, methodname, httpSource); - this.action = action; - this.nameSpace = nameSpace; - } - -}