getPayloadJSON 返回一个空对象
getPayloadJSON returning an empty object
我正在做一些非常简单的脚本调解作为测试,看看我是否可以更改服务器返回的有效负载。
我的未经中介的有效负载显示为:
{"origin":"202.37.75.130"}
然后我尝试做一个非常简单的检查,看看 get 和 set 是否适用于有效负载:
<script language="js">
var older = mc.getPayloadJSON();
var newer=older;
mc.setPayloadJSON(newer);
</script>
我的结果是:
{"jsonObject":""}
我进行的测试表明 setPayloadJSON() 有效,这意味着我的 getPayloadJSON 必须返回一个空对象。
查看日志文件显示:
ERROR {org.apache.synapse.mediators.bsf.ScriptMessageContext} - JSON object is null. {org.apache.synapse.mediators.bsf.ScriptMessageContext}
还有其他人遇到这个错误吗?
希望https://github.com/asanka88/ForcefulJsonConvertor能帮助您解决问题。
我相信它会的。我写这篇文章是为了解决和你一样的问题。
谢谢
以防万一有人遇到同样的问题,我设法让我的工作正常。
我不得不做一个变通方法:
- 在脚本调解器之前使用属性调解器设置一个属性:
属性 名称="JSONPayload" 表达式="json-eval($.)"
- 在脚本中介中,通过执行以下操作获取有效负载(作为字符串):
var pl_string = mc.getProperty("JSONPayload");
- 现在要把字符串转成JS对象:
var pl = JSON.parse(pl_string);
- 像使用
getPayloadJSON()
. 获得一样处理有效负载
我知道这是一种组合在一起的方法,但是 none 其他方法对我有用,所以我尝试了这个方法。
一些信息以防有人想调试它:
我正在使用 API Manager 1.7。
我将消息生成器和格式化程序设置为:
生成器 class = "org.apache.synapse.commons.json.JsonStreamBuilder"
格式化程序 class = "org.apache.synapse.commons.json.JsonStreamFormatter"
最近我需要将事件添加到负载 json 数据以发送到队列。以下是适合我的脚本。
<property name="JSONPayload" expression="json-eval($.)"/>
<script language="js">
<![CDATA[
var pl_string = mc.getProperty("JSONPayload");
var newPayload="{\"event\": " + pl_string + "}";
mc.setPayloadJSON(newPayload);
]]>
</script>
<log level="full" />
我正在做一些非常简单的脚本调解作为测试,看看我是否可以更改服务器返回的有效负载。
我的未经中介的有效负载显示为:
{"origin":"202.37.75.130"}
然后我尝试做一个非常简单的检查,看看 get 和 set 是否适用于有效负载:
<script language="js">
var older = mc.getPayloadJSON();
var newer=older;
mc.setPayloadJSON(newer);
</script>
我的结果是:
{"jsonObject":""}
我进行的测试表明 setPayloadJSON() 有效,这意味着我的 getPayloadJSON 必须返回一个空对象。
查看日志文件显示:
ERROR {org.apache.synapse.mediators.bsf.ScriptMessageContext} - JSON object is null. {org.apache.synapse.mediators.bsf.ScriptMessageContext}
还有其他人遇到这个错误吗?
希望https://github.com/asanka88/ForcefulJsonConvertor能帮助您解决问题。 我相信它会的。我写这篇文章是为了解决和你一样的问题。
谢谢
以防万一有人遇到同样的问题,我设法让我的工作正常。
我不得不做一个变通方法:
- 在脚本调解器之前使用属性调解器设置一个属性:
属性 名称="JSONPayload" 表达式="json-eval($.)"
- 在脚本中介中,通过执行以下操作获取有效负载(作为字符串):
var pl_string = mc.getProperty("JSONPayload");
- 现在要把字符串转成JS对象:
var pl = JSON.parse(pl_string);
- 像使用
getPayloadJSON()
. 获得一样处理有效负载
我知道这是一种组合在一起的方法,但是 none 其他方法对我有用,所以我尝试了这个方法。
一些信息以防有人想调试它:
我正在使用 API Manager 1.7。
我将消息生成器和格式化程序设置为: 生成器 class = "org.apache.synapse.commons.json.JsonStreamBuilder" 格式化程序 class = "org.apache.synapse.commons.json.JsonStreamFormatter"
最近我需要将事件添加到负载 json 数据以发送到队列。以下是适合我的脚本。
<property name="JSONPayload" expression="json-eval($.)"/>
<script language="js">
<![CDATA[
var pl_string = mc.getProperty("JSONPayload");
var newPayload="{\"event\": " + pl_string + "}";
mc.setPayloadJSON(newPayload);
]]>
</script>
<log level="full" />