У меня есть следующий json, который я повторяю для получения каждого токена и идентификатора: {
"Response": {
"Data": [{
"Token": "12345",
"Code": "10148117"
}, {
"Token": "123465",
"Code": "10148118"
}]
}
}
<iterate expression="//Data" id="it1">
<target>
<sequence>
<property expression="//Data/Token" name="SaveFireToken"
scope="default" type="STRING" />
<property expression="//Data/Code" name="SaveCustCode"
scope="default" type="STRING" />
<filter regex="(.|\s)*\S(.|\s)*" source="get-property('SaveFireToken')">
<then />
<else>
<payloadFactory media-type="json">
<format>{
"OutputTimeStamp": "$1",
"OutputRequestID": "$2",
"StatusCode" :"3",
"StatusMessage" : "No token found"
}
</format>
<args>...
</args>
</payloadFactory>
<respond />
</else></filter>
<script language="js">...</script>
<payloadFactory description="Request"
requst to backend
</payloadFactory>
<call>
<endpoint>
<address uri="https://..."/>
</endpoint>
</call>
</sequence>
</target>
</iterate>
Допустим, у меня есть 2 основных обращения к бэкэнду, затем я получаю 2 ответа, которыевыглядит так:
{"id":0000,"success":1,"failure":0,"can_ids":0,"results":[{"message_id":"00000"}]}
Я пытался объединить их, но безуспешно:
<aggregate id="it1">
<completeCondition>
<messageCount min="-1" max="-1" />
</completeCondition>
<onComplete expression="$body/*[1]">
<log>...<log>
</onComplete>
</aggregate>
Может кто-нибудь показать мне, где я делаю что-то не так?Я подозреваю, что я использую это неправильно - xpression = "$ body / * [1]", или если есть способ объединить свойство результата в json из ответов.Кроме того, агрегат должен быть внутри или за пределами итеративного посредника, я видел это в обоих направлениях?
РЕДАКТИРОВАТЬ:
Через некоторое время я использовал это:
<aggregate id="it1">
<completeCondition>
<messageCount max="-1" min="-1"/>
</completeCondition>
<onComplete expression="//jsonObject/success" xmlns:ns="http://org.apache.synapse/xsd">
<log level="full">...</log>
</onComplete>
</aggregate>
Я не знаю, является ли это лучшим решением, но оно сработало для меня и помогло мне извлечь нужные значения из ответа и объединить их.