Обогащение полезной нагрузки в WSO2 - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть массив JSON следующей структуры.

 {"paymentItems": [
    {
        "amount": "180000",
        "code": "28"
    },
    {
        "amount": "396000",
        "code": "06"
    },
    {
        "amount": "1460000",
        "code": "01"
    }
]
}

Я пытаюсь обогатить каждый элемент списка массив дополнительным значением JSON.

<foreach expression="//paymentItems" id="1">
            <sequence>
                <property expression="//paymentItems/amount" name="amount" scope="default" type="STRING"/>
                <property expression="//paymentItems" name="body" scope="default" type="STRING"/>
                <log>
                    <property expression="$ctx:amount" name="INIDIVIDUAL_AMOUNT"/>
                </log>
                <script language="js"><![CDATA[var amount = mc.getProperty('amount'); var naira = amount/100; mc.setProperty("nairaValue", naira);]]></script>
                <log>
                    <property expression="get-property('nairaValue')" name="NAIRA_VAL"/>
                </log>
                <property expression="get-property('nairaValue')" name="naira" scope="default" type="STRING"/>
                <enrich>
                    <source type="custom" xpath="$ctx:nairaValue"/>
                    <target action="child" type="body"/>
                </enrich>
            </sequence>
 </foreach>

Как вы можетевидите, я обрабатываю значение в foreach, а затем использую результат и пытаюсь добавить его к элементу массива, но он не выдает ошибок и не добавляет значение.

1 Ответ

0 голосов
/ 15 мая 2019

Foreach mediator выполняет следующие действия:

  1. сначала берет клон исходного сообщения
  2. берет повторяющийся элемент из исходного сообщения (используя XPath)
  3. Создатьновый контекст сообщения, добавив повторяющийся элемент в клонированный конверт
  4. Выполните шаги передачи, указанные в последовательности для этого нового контекста сообщения

Поскольку для каждой итерации мы клонируемновый контекст сообщения (скажем, context2) и исходный контекст сообщения (скажем, context1) - это отдельный контекст, который мы не можем обогатить из context2 в context1.

Вот причина поведения, которое вы испытываете.

В качестве исправления вы можете выполнить итерацию самостоятельно из посредника сценария и при необходимости изменить сообщение.

...