Есть ли способ установить значение по умолчанию для посредника свойства, если свойство не существует в теле запроса? - PullRequest
2 голосов
/ 26 марта 2019

Я строю простой API в WSO2 EI / ESB.Я сохраняю каждый из параметров запроса в свойствах, таких как:

<property expression="json-eval($.client_id)" name="client_id" scope="default" type="STRING"/>

И затем создаю полезную нагрузку, используя фабрику полезной нагрузки:

<payloadFactory media-type="json">
                <format>       
                    {

                        "req_type": "1",
                        "client_id": $1

                    }
                </format>
                <args>
                    <arg evaluator="xml" expression="get-property('client_id')"/>
                </args>
</payloadFactory>

Однако, если я отправил пустое сообщение {} (без client_id), то в аргументе $ 1 ничего не помещается, и итоговая полезная нагрузка не будет проверяться:

{
                    "req_type": "1",
                    "client_id:
}

Я хотел бы знать, есть ли способ установить значение по умолчанию, когдасохранить это выражение в свойстве посредника?Например: <property expression="json-eval($.client_id)" name="client_id" scope="default" type="STRING" defaultValue="0"/> или что-то в этом роде.

Я знаю, что могу реализовать фильтры, чтобы проверить, существует ли поле, и проверить его, но я считаю, что это может стать немного загроможденным.

Ответы [ 3 ]

2 голосов
/ 26 марта 2019

Нет, вы не можете использовать payloadFactory.Вы должны выбрать одно из следующих решений:

  • Замените ваш payloadFactory на XSLT-преобразование, которое является более гибким (лучшее решение)
  • Добавьте фильтр для построения вашего параметра и установите значение дляdefault
  • Используйте посредник сценариев, чтобы заменить болезненный фильтр и иметь возможность легко управлять операторами if / then / else.Затем вы можете инициализировать свойство из посредника скрипта.
0 голосов
/ 01 апреля 2019

Условный xpath? Это может сработать. Поиграйте с кодом внизу.

<enrich>
    <source clone="true" type="custom" xpath="0"  />
    <target action="replace" type="custom" xpath="" property="boolean(string-length(//client_id) != 0)" />
</enrich>
0 голосов
/ 26 марта 2019

Я не думаю, что есть способ сделать это.Вам придется использовать фильтры.

...