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的引擎:
- 打开
repository/conf/deployment.toml文件 - 添加或修改配置:
[mediation_script] js_engine = "nashorn"
- 重启WSO2服务后,即可正常使用ES6的
Map对象。
内容的提问来源于stack exchange,提问作者Praveen kumar
相关产品推荐
相关产品推荐

