JS脚本API


Java代码中的API

如果希望在Java代码中嵌入JS代码的执行能力,可以使用ScriptUtil的API:

package rewin.ubsi.common;

public class ScriptUtil {

    /** 脚本输出消息的格式 */
    public static class Message {
        public long     time;   // 时间戳,毫秒数
        public int      type;   // 消息类别,LogUtil.DEBUG | INFO | ERROR
        public String   text;   // 消息内容
    }

    /** API说明,格式:{ "方法": "说明" } */
    public static Map Api;

    /** 脚本的执行结果 */
    public Object  Result;

    /** 脚本执行过程中的输出消息记录 */
    public List<Message> Messages;

    /** 构造函数 */
    public ScriptUtil() {}
    /** 构造函数,指定服务容器的地址 */
    public ScriptUtil(String host, int port);
    /** 构造函数,指定日志记录的属性 */
    public ScriptUtil(String appTag, String appID, String tips);

    /** 设置脚本日志的输出级别:"NONE" | "DEBUG" | "INFO" | "ERROR" */
    public static void setLogLevel(String level);

    /** 获得脚本日志的输出级别 */
    public static String getLogLevel();

    /** 获得JavaScript脚本执行引擎
     *  参数:
     *    context - ScriptUtil对象实例,为JS脚本提供'$'对象
     *    var - 供JS脚本使用的其他环境变量
     *  返回:
     *     javax.script.ScriptEngine对象
     */
    public static ScriptEngine getEngine(ScriptUtil context, Map<String, Object> var);

    /** 执行JavaScript脚本
     *  参数:
     *    engine - JavaScript执行引擎
     *    js - JavaScript脚本代码
     *  返回:
     *     JavaScript脚本代码的执行结果
     */
    public static Object runJs(ScriptEngine engine, String js) throws Exception;

    /** 执行JavaScript脚本
     *  参数:
     *    js - JavaScript脚本代码
     *    context - ScriptUtil对象实例,为JS脚本提供'$'对象
     *    var - 供JS脚本使用的其他环境变量
     *  返回:
     *     JavaScript脚本代码的执行结果
     */
    public static Object runJs(String js, ScriptUtil context, Map<String, Object> var) throws Exception;

}

JS代码中的API

通过ScriptUtil加载的JS代码,都可以使用"$"对象提供的API:

  • $.host('container-host', port) 设置UBSI请求的目标容器,container-host为null表示路由模式,缺省为路由模式

  • $.header({...}) 设置UBSI请求的Header

  • $.version('min_ver', 'max_ver', release) 设置UBSI请求的服务版本限制,release取值:-1-不限,0-非release,1-release

  • $.timeout(seconds)

    设置UBSI请求的超时时间(秒数),0表示不限,-1表示使用缺省值

  • $.async(true|false)

    设置同步/异步方式发送请求,缺省为同步方式

  • $.request('service', 'entry', ...)

    发送UBSI请求,同步方式返回结果,异步方式直接返回null

  • $.result(data)

    设置脚本的返回结果,如果不设置,则将最后一条语句的值作为脚本结果

  • $.sleep(millis)

    暂停millis毫秒

  • $.json(obj)

    将obj转换为json字符串,JS解析:val=eval('(' + json + ')');

  • $.debug('msg')

    输出一条debug信息

  • $.info('msg')

    输出一条info信息

  • $.error('msg')

    输出一条error信息

  • $.broadcast('channel', data)

    发送一条广播消息

  • $.throwEvent('channel', data)

    发送一条事件消息

  • $._byte(n)

    将JS的number转换为Java的byte

  • $._int(n)

    将JS的number转换为Java的int

  • $._long(n)

    将JS的number转换为Java的long

  • $._bigint('str')

    将JS字符串转换为Java的BigInteger

  • $._double(n)

    将JS的number转换为Java的double

  • $._bignum('str')

    将JS字符串转换为Java的BigDecimal

  • $._bytes([...])

    将JS的number数组转换为Java的byte[]

  • $._map({...})

    将JS的对象转换为Java的Map

  • $._list([...])

    将JS数组转换为Java的List(注:Java会将JS的[]当成Map)

  • $._set([...])

    将JS数组转换为Java的Set

  • $._array([...])

    将JS数组转换为Java的Object[]

另外在JS代码中还可以直接使用Packages.xxx来引用UBSI核心包关联的任意Java类,例如:

var array = new Packages.java.util.ArrayList();

results matching ""

    No results matching ""