как вызвать сервис (или параметр одного сервиса) из другого сервиса в wso2 ESB

Я использую wso2 ESB для создания API для отдыха в формате json. У меня есть спокойный веб-сервис json, который дает ответ. Мне нужно использовать один из параметров этого ответа в другом сервисном вызове. Как я могу сделать такую ​​цепочку сервисов в wso2 ESB.

например: -

у меня есть спокойный URL-адрес abc.com/cusotmer. Я получил ответ обратно. Предположим, что «id» является одним из параметров ответа. Я хочу использовать этот параметр в другом вызове службы (скажем, xyz.com/sheet), который внутренне вызывает первую службу (abc.com/cusotmer).

Может ли кто-нибудь из вас помочь мне в этом отношении?


person user2326831    schedule 04.01.2016    source источник


Ответы (2)


Это сервисная цепочка. Вы можете обратиться к статье библиотеки WSO2, которая ясно объясняет это на примере http://wso2.com/library/articles/2011/01/wso2-esb-by-example-service-chaining/

person Thusitha Thilina Dayaratne    schedule 05.01.2016
comment
Большинство показанных примеров основано на мыле. Я не смог найти ничего, связанного с объектом JSON. У вас есть указатели - person user2326831; 05.01.2016
comment
один маленький вопрос, который я не могу понять. Предположим, у меня есть ответ, который выглядит следующим образом {param1: false, param2: {id: 12345, value: 50}, можете ли вы сказать мне, хочу ли я получить поле значения, как я могу сделать это в wso2 esb? и этот ответ исходит от URL-адреса, скажем, abc.com. Не могли бы вы помочь мне в этом отношении - person user2326831; 06.01.2016

Цепочка сервисов — важная функция любой доступной ESB.

Вы можете использовать Call Mediator, который сохраняет управление в последовательности (скажем, в вашей последовательности)

Вы можете использовать вызов для первой конечной точки, для второй конечной точки я предполагаю, что идентификатор доступен в теле ответа, вы можете использовать json-eval или xpath, чтобы получить это значение, в зависимости от типа данных, которые использует вторая служба, вы можете использовать PayloadFactoryMediator и установите идентификатор в нужной части тела

А в следующей строке вы можете снова позвонить с помощью Call Mediator или Send

Грубый код будет похож.

<payloadFactory media-type="json">
            <format>
                 { "A": "6", "tests": [{ "id": "xyz", "status": "new", "emp": [{ "Id": "12345" }] }], "student": [{ "Id": "65", "Name": "Ram" }] }
            </format>

        </payloadFactory>
<call>
        <endpoint>
           <http method="get" uri-template="http://192.168.1.10:8088/mockaxis2service"/>
        </endpoint>
     </call>
<!-- suppose id field comes as response in field name id2 -->
<payloadFactory media-type="json">
            <format>
               {
                 "inp2second":"$1"       
               }
            </format>
            <args>
                <arg expression="$.emp.id2"/>
            </args>
        </payloadFactory>
<call> or <send>

Теперь вы можете использовать либо вызов, либо отправку посредника, отправку посредника, чтобы переместить управление в аутпоследовательность.

для выражения json, используемого выше как $.emp.id2, пожалуйста, обратитесь к странице поддержки json, например Пример цепочка сервисов также доступна здесь

person Rahul    schedule 04.01.2016
comment
@ Rahul Тело ответа 2-й службы (откуда я выбираю параметр «id») и тело запроса первой службы имеют формат json. где идентификатор поля «emp» извлекается из 2-го сервиса. Не могли бы вы дать мне знать, как это сделать. - person user2326831; 05.01.2016
comment
Пример запроса первой услуги: {A: 6, тесты: [{id: xyz, status: new, emp: [{id: 12345, }] }], student: [{id: 65, Name: Ram }] } - person user2326831; 05.01.2016
comment
обновил ответ @ user2326831, я настоятельно рекомендую вам прочитать документацию по ссылкам поддержки payloadfactory и json, приведенным выше, и подумать, как двигаться с решением, которое я предоставил, я не знаю точную структуру, поэтому я принял тело для второго сервиса, для нескольких аргументов вы можете добавить аргумент как $2, $3 и т. д. - person Rahul; 06.01.2016
comment
Спасибо. Я понял концепцию. один маленький вопрос, который я не могу понять. Предположим, у меня есть ответ, который выглядит следующим образом {param1: false, param2: {id: 12345, value: 50}, можете ли вы сказать мне, хочу ли я получить поле значения, как я могу сделать это в wso2 esb? и приведенный выше образец ответа поступает с URL-адреса, скажем, abc.com. Не могли бы вы помочь мне в этом отношении? - person user2326831; 06.01.2016
comment
Вы можете использовать $.param2.value в любом выражении свойства или, если вы хотите использовать его в payloadfactory, вы можете сделать, как показано в моем ответе выше. Если wso2 случайно внутренне преобразуется в xml json , вы можете проверить, используя <log level="full"/>, тогда вы также можете использовать выражение xpath. - person Rahul; 06.01.2016