从 wso2 中的 soap 响应中获取 json 消息

Get json message from soap response in wso2

...
<property expression="//soap:Envelope/soap:Body/Response/Result" name="result"/>
<log>
  <property expression="get-property('result')" name="result"/>
</log>
...

回应

...
<response>  [  { "_id": "62908b4267c5284f7fa8320e",  "index": 0, "serial": "11006883-fb2b-49ba-a6f7-0ec0daafa1c5", "Active": false, "balance": ",723.68", ,"age": 34 }]    </response>

如何获得 ID 和余额的响应 属性? 当我使用

 <log>
    <property expression="get-property('response')" name="response"/>
 </log>

仅returns Json数组仅

假设您的 XML 回复中有一个有效的 Json。您可以执行以下操作来获取 ID 和余额。这里就得用到脚本中介了。

<property expression="//response/text()" name="jsonMessageContent"/>
<script language="nashornJs"><![CDATA[
// Get the Json message portion from the response. You can use property mediator extract only that part      
mc.getProperty('jsonMessageContent')
// Convert into a Json Object
var jsonObj = JSON.parse(mc.getProperty('jsonMessageContent'));
// Specify your jsonpath here and extract
var balance = jsonObj.balance;

// Set to a different property  so you can use it in your integrations
mc.setProperty("balance", balance);
]]></script>

我们可以假设负载如下所示。

    <response>
[
    {
        "_id": "62908b4267c5284f7fa8320e",
        "index": 0,
        "serial": "11006883-fb2b-49ba-a6f7-0ec0daafa1c5",
        "Active": false,
        "balance": ",723.68",
        "age": 34
    }
]
</response>

我们将 <response> 标签值存储到 属性 中,如下所示。

<property name="jsonMessageContent" expression="//response/text()"/>

Post 那,要使用 enrich 中介将 属性 值转换成正文。

<enrich>
        <source clone="false" xpath="get-property('jsonMessageContent')"/>
        <target type="body"/>
     </enrich>

最后我们可以使用 xpath 从 payload

中获取像 _id,balance 这样的值
<log level="custom">
        <property name="id value***" expression="//jsonArray/jsonElement/_id/text()"/>
        <property name="balance value***" expression="//jsonArray/jsonElement/balance/text()"/>
     </log>

输出:

id value*** = 62908b4267c5284f7fa8320e, balance value*** = ,723.68