You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSO2脚本标签中Map未定义错误的技术咨询

解决WSO2中JS脚本Map未定义的问题

问题重现

在WSO2中编写如下JavaScript脚本创建Map对象:

var detailsMap = new Map();

执行时抛出异常:

ScriptMediator The script engine returned an error executing the
inlined js script function mediate
com.sun.phobos.script.util.ExtendedScriptException:
org.mozilla.javascript.EcmaError: ReferenceError: "Map" is not
defined. (<Unknown Source>#4) in <Unknown Source> at line number 4

原因分析

WSO2默认使用的Rhino JavaScript引擎版本较低,不支持ES6引入的Map对象,直接调用new Map()会触发未定义错误。

解决方法

方法1:使用Java HashMap替代

Rhino引擎可直接调用Java类,用java.util.HashMap实现键值对存储:

var detailsMap = new java.util.HashMap();
// 添加键值对
detailsMap.put("key1", "value1");
detailsMap.put("key2", 123);
// 获取值
var value = detailsMap.get("key1");
// 遍历键值对
var iter = detailsMap.entrySet().iterator();
while (iter.hasNext()) {
    var entry = iter.next();
    var key = entry.getKey();
    var val = entry.getValue();
}

方法2:用普通JS对象模拟Map

如果仅使用字符串/数字类型的键,可直接用普通对象替代:

var detailsMap = {};
// 添加键值对
detailsMap["key1"] = "value1";
detailsMap.key2 = 123;
// 获取值
var value = detailsMap["key1"];
// 遍历键值对
for (var key in detailsMap) {
    if (detailsMap.hasOwnProperty(key)) {
        var val = detailsMap[key];
    }
}

方法3:切换到Nashorn引擎(部分WSO2版本支持)

若你的WSO2版本(如EI 6.6.0及以上)支持Nashorn,可修改配置切换到支持ES6的引擎:

  1. 打开repository/conf/deployment.toml文件
  2. 添加或修改配置:
[mediation_script]
js_engine = "nashorn"
  1. 重启WSO2服务后,即可正常使用ES6的Map对象。

内容的提问来源于stack exchange,提问作者Praveen kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:59:55