Ошибка при доступе к 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"/>

Другие вопросы по тегам