Ошибка при доступе к ESB Proxy с помощью Jaggery WSStub
Я создал веб-сервис и смог без проблем отправлять ему запросы из серверного скрипта Jaggery.js. Затем я создал прокси-сервис WSDL внутри WSO2 ESB и протестировал его, используя "Попробуйте!" особенность.
После того, как я перенаправил свой серверный скрипт из исходного веб-сервиса на его прокси-сервер внутри ESB, я получил ошибку в системных журналах:
Ссылка на конечную точку (EPR) для операции не найдена: /services/BpmAdderProcessProxy.BpmAdderProcessProxyHttpSoap11Endpoint и WSA Action = urn:anonOutInOpResponse. Если этот EPR был ранее доступен, пожалуйста, свяжитесь с администратором сервера.
Чтобы увидеть подробно, что происходит, я активировал "SOAP Message Tracer" ESB. Внезапно мой серверный скрипт может получить доступ к веб-сервису через мой прокси-сервер ESB. Затем я деактивировал "SOAP Message Tracer", и сообщение об ошибке вернулось снова. Мой серверный скрипт правильный? Или средство отладки изменяет поведение отлаженного кода?
Я разработчик JavaScript. На самом деле Jaggery и UES ориентированы на таких людей, как я. Я не должен заглядывать в код Java, не так ли? Есть ли форум, на котором разработчики JavaScript обсуждают WSO2 UES и 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++];
}
);
}
%>
1 ответ
В ESB v4.8.1 сквозной транспорт включен по умолчанию, и он не поддерживает диспетчеризацию на основе тела SOAP (он не создает сообщение, поэтому не может получить доступ к первому элементу тела для поиска операции).
Вы можете добавить имя операции к URL-адресу конечной точки:
http://host:8280/services/BpmAdderProcessProxy/OperationName
Вы можете добавить этот параметр в свой прокси-сервер (BpmAdderProcessProxy) в WSO2 ESB:
<parameter name="disableOperationValidation" locked="false">true</parameter>
Вы можете отредактировать wso2esb/repository/conf/axis2/axis2.xml и заменить
<handler class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher" name="SOAPMessageBodyBasedDispatcher"/>
с<handler class="org.apache.synapse.core.axis2.SynapseSOAPMessageBodyBasedDispatcher" name="SOAPMessageBodyBasedDispatcher"/>