WSO2代理执行JS脚本报错Cannot call method 'info' of undefined求解
问题原因
报错信息明确指向第3行代码调用info方法的对象为undefined,你的代码第3行就调用了log.info()输出日志,但log对象是在脚本中段才通过var log = mc.getServiceLog();声明赋值的,调用时log还没有被定义,自然会抛出找不到方法的错误。
另外注意WSO2 Synapse脚本中介器的JS运行环境没有内置全局log对象,所有日志输出必须先通过消息上下文mc.getServiceLog()获取日志实例后再调用对应级别方法。
解决方案
调整脚本内代码顺序,把log对象的声明放在所有日志输出语句之前即可,修改后的代理服务script段代码如下:
<script language="js"><![CDATA[var plInput = mc.getPayloadJSON(); // 先初始化log对象,再调用日志方法 var log = mc.getServiceLog(); log.info("Log messaggio ricevuto: "+ JSON.stringify(plInput)); var localRespinta = true; var localConclusa = true; if (plInput.stato == 1) { localRespinta = false; localConclusa = false; } if (plInput.stato == 2) { localRespinta = false; localConclusa = true; } if (plInput.stato == 3) { localRespinta = false; localConclusa = true; } var keys = Object.keys(plInput); var response = { "key": plInput.key, "id": plInput.id, "motivo": plInput.motivo, "respinta": localRespinta, "conclusa": localConclusa }; log.info("Logging inside Script Mediator"+JSON.stringify(response)); mc.setPayloadJSON(response);]]></script>
内容的提问来源于stack exchange,提问作者Pietro Ricciardi
相关产品推荐
相关产品推荐

