getPayloadJSON返回一个空对象

时间:2015-01-08 19:47:17

标签: wso2 wso2esb wso2carbon wso2-am

我正在做一些非常简单的脚本中介作为测试,看看我是否可以更改我的服务器返回的有效负载。

我的无中断有效载荷如下:

{"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}

还有其他人有此错误吗?

3 个答案:

答案 0 :(得分:4)

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

我必须做一个解决方法:

  1. 在脚本调解器之前使用属性介体来设置属性:
  2. 属性名称=&#34; JSONPayload&#34;表达式=&#34; JSON-的eval($。)&#34;

    1. 在脚本调解器中,通过执行以下操作获取有效内容(作为字符串):
    2. var pl_string = mc.getProperty(&#34; JSONPayload&#34;);

      1. 现在必须将字符串转换为JS对象:
      2. var pl = JSON.parse(pl_string);

        1. 操纵有效负载,就像您使用getPayloadJSON()
        2. 获取有效负载一样

          我知道这是一个被黑客攻击的方法,但其他方式都没有为我工作所以我尝试了这个。

          有些人希望调试它的信息:

          我正在使用API​​ Manager 1.7。

          我将消息构建器和格式化程序设置为: Builder class =&#34; org.apache.synapse.commons.json.JsonStreamBuilder&#34; Formatter class =&#34; org.apache.synapse.commons.json.JsonStreamFormatter&#34;

答案 1 :(得分:0)

希望https://github.com/asanka88/ForcefulJsonConvertor可以帮助您解决问题。 而且我相信它会。我写这篇文章是为了克服与你相同的问题。

由于

答案 2 :(得分:0)

最近我需要向有效负载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" />