使用Jaggery WSStub访问ESB代理时出错

时间:2014-08-25 09:15:13

标签: wso2 wso2esb jaggery-js

我创建了一个Web服务,并且能够从服务器端Jaggery.js脚本向它发送请求,没有任何问题。然后我在WSO2 ESB中创建了一个WSDL代理服务,并使用"试一试!"特征。

将服务器端脚本从原始Web服务重定向到ESB内的代理后,我收到了系统日志中的错误:

  

未找到Operation的端点引用(EPR)是/services/BpmAdderProcessProxy.BpmAdderProcessProxyHttpSoap11Endpoint和WSA Action = urn:anonOutInOpResponse。如果以前可以访问此EPR,请与服务器管理员联系。

为了详细了解发生了什么,我激活了" SOAP消息跟踪器" ESB。突然,我的服务器端脚本可以通过我的ESB代理访问webservice。然后我停用了" 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++]; 
        }
    );

}

%>

1 个答案:

答案 0 :(得分:0)

在ESB v4.8.1中,默认情况下启用了直通传输,它不支持基于SOAP体的调度(它不会构建消息,因此它无法访问正文的第一个元素找到操作)

  • 您可以将操作名称附加到端点网址:http://host:8280/services/BpmAdderProcessProxy/OperationName

  • 您可以在WSO2 ESB中的代理配置文件(BpmAdderProcessProxy)中添加此参数:<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"/>