2017-01-02 156 views
0

这是我的背景: 我有这样的身体JSON:遍历在WSO2 ESB阵列

{ 
    "delivery": [ 
     { 
      "note": "aaaaaa", 
      "method": "x" 
     }, 
     { 
      "note": "bbb", 
      "method": "y" 
     }, 
     { 
      "note": "ccc", 
      "method": "x" 
     } 
    ], 
    "partner": { 
      "zip": "a", 
      "country": "b", 
      "city": "c"   
    } 
} 

我需要遍历交付阵列和创建对象(投递物品+伙伴对象),然后拨打电话到端点。

例如,这第一个对象:

{ 
    "delivery": 
    { 
     "note": "aaaaaa", 
     "method": "x" 
    } 
    "partner": { 
      "zip": "a", 
      "country": "b", 
      "city": "c" 
    } 
} 

,然后拨打电话到端点

该操作将被重复X = array.lenght

我创建这个序列,但它不” t work

<?xml version="1.0" encoding="UTF-8"?> 
<sequence name="tec_notif-expe_v1" xmlns="http://ws.apache.org/ns/synapse"> 
    <in>  
     <property name="RESPONSE" scope="default" value="true"/> 
     <property action="remove" name="NO_ENTITY_BODY" scope="axis2"/> 
     <header action="remove" name="To"/> 
     <property name="partner" expression="json-eval($.partner)" scope="default" /> 
     <!-- iterate over delivery--> 
     <iterate continueParent="true" expression="//delivery"> 
      <target sequence="anon"> 
       <sequence> 
        <property name="deliveryItem" expression="//delivery" /> 

        <script language="js"><![CDATA[ 
         var body = {}; 
         body.delivery = {}; 
         body.partner = {}; 
         body.delivery = mc.getProperty('deliveryItem'); 
         body.partner = mc.getProperty('partner'); 

         mc.setPayloadJSON(body); 
        ]]></script> 
        <call> 
         <endpoint key="update-eklem"/> 
        </call> 
       </sequence> 
      </target> 
     </iterate> 
     <send /> 
     <drop />  
    </in> 
</sequence> 

你有什么建议吗?

致以问候

回答

0

您是否在日志中看到任何错误?尝试在迭代之前和之后添加日志语句,以查看您收到的内容以及xpath是否正确。

我已经做了嵌套的JSON数组一样没有任何问题,除了XPath的:-)

我收到的请求是这样的。

{ 
    "jsonElement" : [{ 
     "val1" : "some Value", 
     "val2" : "some Value" 
     "array" : [{ 
      .... data 
      "arrayVal1" : "array Val1", 
      .... 
     }] 
    }] 
} 

在序列中,我添加了以下内容。

<iterate continueParent="true" expression="//jsonElement"> 
    .. get some values e.g. <property name="val1" expression="//val1/text()" scope="default" type="STRING"/> 
    <iterate expression="//array"> 
     <property name="arrayVal1" expression="//arrayVal1/text()" scope="default" type="STRING"/> 
     ..... 
    </iterate> 
</iterate>