Попробуем использовать шину для опосредования веб-сервисов. За основу возьмём урок, опубликованный на официальном сайте.
В качестве веб-сервися будем использовать созданный нами ранее сервис для сложения двух чисел. В качестве клиента будем использовать также уже имеющийся у нас веб-интерфейс на ExtJs.
Наша задача отправить запрос на веб-сервис из пользовательского веб-интерфейса через шину ESB:
В настройках ESB мы создадим прокси-сервис. Он будет выполнять роль точки подключения веб-интерфейса. На сайте WSO2 находим такое определение прокси-сервиса:
Из перечисленных с правой стороны вариантов выберем "WSDL Based Proxy". Система создаст для нас и прокси-сервис, и концевую точку. При желании можно выбрать одну из концевых точек из реестра артефактов, но мы не будем этого делать. Заполним поля формы:
Данные берём из WSDL бизнес-процесса:
Получаем сообщение о том, что прокси-сервис успешно создан:
Находим наш сервис в списке и сразу переходим в Source View:
Чтобы избежать возникновения ошибки "The endpoint reference (EPR) for the Operation not found" Добавляем параметр disableOperationValidation сразу после открывающего тэга <proxy>:
(Читать про ошибку на 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 этот параметр выглядит так:
В качестве веб-сервися будем использовать созданный нами ранее сервис для сложения двух чисел. В качестве клиента будем использовать также уже имеющийся у нас веб-интерфейс на 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 этот параметр выглядит так:
Комментариев нет:
Отправить комментарий