вторник, 26 августа 2014 г.

Сервисна шина предприятия WSO2 ESB

Попробуем использовать шину для опосредования веб-сервисов. За основу возьмём урок, опубликованный на официальном сайте.

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

Наша задача отправить запрос на веб-сервис из пользовательского веб-интерфейса через шину ESB:

В настройках ESB мы создадим прокси-сервис. Он будет выполнять роль точки подключения веб-интерфейса. На сайте WSO2 находим такое определение прокси-сервиса:
Прокси-сервис представляет собой виртуальный сервис, который получает сообщения и может обрабатывать их перед отправкой на заданную концевую точку. Такой подход позволяет выполнить необходимые преобразования и внедрить дополнительную функциональность без внесения изменений в существующий веб-сервис.
Концевая точка (Endpoint) описывается такими словами:
Концевая точка содержит параметры внешнего пункта назначения для исходящего из шины сообщения.
Откроем в браузере панель администрирования сервисной шины предприятия и перейдём в пункт меню Manage -> Services -> Add -> Proxy Service:


Из перечисленных с правой стороны вариантов выберем "WSDL Based Proxy". Система создаст для нас и прокси-сервис, и концевую точку. При желании можно выбрать одну из концевых точек из реестра артефактов, но мы не будем этого делать. Заполним поля формы:


Данные берём из WSDL бизнес-процесса:


Получаем сообщение о том, что прокси-сервис успешно создан:


Находим наш сервис в списке и сразу переходим в Source View:



Чтобы избежать возникновения ошибки  "The endpoint reference (EPR) for the Operation not found" Добавляем параметр disableOperationValidation сразу после открывающего тэга <proxy>:






<parameter name="disableOperationValidation" locked="false">true</parameter>
 

(Читать про ошибку на Stackoverflow)



Сейчас мы перенаправим наш скрипт Jaggery с веб-сервиса BPS на его прокси в шине ESB. Берём ссылку из дэшборда созданного только что прокси-сервиса:

И вставляем его в код Jaggery:

<%

var x = request.getParameter("x");
var y = request.getParameter("y");
//var sum = parseInt(x) + parseInt(y);
var sum = add(parseInt(x), parseInt(y));

response.content = {
    success: true,
    data: {
        result: sum
    }
};

function add(x, y) {

    var ws = require("ws");

    var stub = new ws.WSStub("http://02-128:8280/services/BpmAdderProcessProxy?wsdl");

    var process = stub.services["BpmAdderProcessProxy"].operations["process"];

    var payloadTemplate = process.payloadXML();

    var payload = replaceQuestionMarks(payloadTemplate, arguments);

    var resultXml = process.request(payload);

    var resultValue = resultXml.children().text();

    return parseInt(resultValue);


}

function replaceQuestionMarks(template, values) {

    var i = 0;

    return template.replace(
        /\?/g,
        function() {
            return values[i++];
        }
    );

}

%>


Убеждаемся, что всё работает:


Итак, WSO2 ESB предоставляет удобный инструмент для быстрого проксирования веб-сервисов. Концевая точка создаётся автоматически. Главное, не забывать вклюключить определение вызываемого метода веб-сервиса по телу SOAP-запроса, как показано выше. Кстати в Design View этот параметр выглядит так:


Комментариев нет:

Отправить комментарий