From 2f5c368124e20322f06738a437c0e141aac0d38b Mon Sep 17 00:00:00 2001 From: hns Date: Wed, 18 Jun 2003 16:11:02 +0000 Subject: [PATCH] Added Remote (XML-RPC client) object. Fixes in XML-RPC argument encoding. --- src/helma/scripting/rhino/RhinoCore.java | 15 +- src/helma/scripting/rhino/RhinoEngine.java | 2 +- src/helma/scripting/rhino/XmlRpcObject.java | 155 ++++++++++++++++++++ 3 files changed, 168 insertions(+), 4 deletions(-) create mode 100644 src/helma/scripting/rhino/XmlRpcObject.java diff --git a/src/helma/scripting/rhino/RhinoCore.java b/src/helma/scripting/rhino/RhinoCore.java index bb93ffb9..0b146d5a 100644 --- a/src/helma/scripting/rhino/RhinoCore.java +++ b/src/helma/scripting/rhino/RhinoCore.java @@ -84,6 +84,7 @@ public final class RhinoCore { ScriptableObject.defineClass(global, FileObject.class); ScriptableObject.defineClass(global, FtpObject.class); ImageObject.init(global); + XmlRpcObject.init(global); MailObject.init(global, app.getProperties()); putPrototype("hopobject", ScriptableObject.getClassPrototype(global, "HopObject")); @@ -378,15 +379,23 @@ public final class RhinoCore { * representation. */ - public Object processXmlRpcArgument (Object what, Context cx) throws Exception { + public Object processXmlRpcArgument (Object what) throws Exception { if (what == null) return null; if (what instanceof Vector) { Vector v = (Vector) what; - return Context.toObject(v.toArray(), global); + Object[] a = v.toArray(); + for (int i=0; i + *
  • plain objects (with all properties returned by ESObject.getProperties ()) + *
  • arrays + *
  • strings + *
  • date objects + *
  • booleans + *
  • integer and float numbers (long values are not supported!) + * + * + */ +public class XmlRpcObject extends BaseFunction { + + String url = null; + String method = null; + + XmlRpcObject(String url) { + this.url = url; + this.method = null; + } + + XmlRpcObject(String url, String method) { + this.url = url; + this.method = method; + } + + /** + * This method is used as HopObject constructor from JavaScript. + */ + public static Object xmlrpcObjectConstructor(Context cx, Object[] args, + Function ctorObj, boolean inNewExpr) { + if (args.length == 0 || args.length > 2) { + throw new IllegalArgumentException("Wrong number of arguments in constructor for XML-RPC client"); + } + if (args.length == 1) { + String url = args[0].toString(); + return new XmlRpcObject(url); + } else { + String url = args[0].toString(); + String method = args[1].toString(); + return new XmlRpcObject(url, method); + } + + } + + /** + * Called by the evaluator after the extension is loaded. + */ + public static void init(Scriptable scope) { + Method[] methods = XmlRpcObject.class.getDeclaredMethods(); + Member ctorMember = null; + for (int i=0; i