Ошибка при доступе к прокси-серверу ESB с помощью Jaggery WSStub

Я создал веб-службу и смог без проблем отправлять к ней запросы из сценария Jaggery.js на стороне сервера. Затем я создал прокси-службу WSDL внутри WSO2 ESB и протестировал ее с помощью кнопки «Попробуй!». характерная черта.

После того, как я перенаправил свой серверный скрипт с исходного веб-сервиса на его прокси внутри ESB, я получил ошибку в системных журналах:

Ссылка на конечную точку (EPR) для операции не найдена: /services/BpmAdderProcessProxy.BpmAdderProcessProxyHttpSoap11Endpoint, а действие WSA = urn:anonOutInOpResponse. Если этот EPR ранее был доступен, обратитесь к администратору сервера.

Чтобы подробно увидеть, что происходит, я активировал "SOAP Message Tracer" ESB. Внезапно мой серверный скрипт смог получить доступ к веб-сервису через мой прокси-сервер ESB. Затем я деактивировал «Трассировщик сообщений SOAP», и сообщение об ошибке снова появилось. Верен ли мой серверный скрипт? Или средство отладки изменяет поведение отлаживаемого кода?

Я разработчик 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++]; 
        }
    );

}

%>

person extjstricks    schedule 25.08.2014    source источник
comment
какую версию wso2 esb вы используете? Можете ли вы изменить его конфигурацию?   -  person Jean-Michel    schedule 25.08.2014
comment
Жан-Мишель, спасибо за комментарий. Я использую версию 4.8.1 wso2 esb и могу изменить ее конфигурацию. Я пытаюсь привыкнуть к продуктам WSO2. Многие вещи для меня новые.   -  person extjstricks    schedule 26.08.2014


Ответы (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"/>

person Jean-Michel    schedule 26.08.2014
comment
Жан-Мишель, второй вариант решил мою проблему. Я открыл конфигурацию ESB Proxy Service в режиме просмотра исходного кода и вставил элемент параметра чуть ниже открывающего тега прокси. После сохранения конфигурации я отключил SOAP Message Tracer и протестировал свой сценарий Jaggery. Это работало. Большое спасибо! - person extjstricks; 26.08.2014