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能帮助您解决问题。 我相信它会的。我写这篇文章是为了解决和你一样的问题。

谢谢

以防万一有人遇到同样的问题,我设法让我的工作正常。

我不得不做一个变通方法:

  1. 在脚本调解器之前使用属性调解器设置一个属性:

属性 名称="JSONPayload" 表达式="json-eval($.)"

  1. 在脚本中介中,通过执行以下操作获取有效负载(作为字符串):

var pl_string = mc.getProperty("JSONPayload");

  1. 现在要把字符串转成JS对象:

var pl = JSON.parse(pl_string);

  1. 像使用 getPayloadJSON().
  2. 获得一样处理有效负载

我知道这是一种组合在一起的方法,但是 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" />