代码之家  ›  专栏  ›  技术社区  ›  extjstricks

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

  •  0
  • extjstricks  · 技术社区  · 11 年前

    我创建了一个web服务,能够从服务器端Jaggery.js脚本向它发送请求,没有任何问题。然后,我在WSO2ESB中创建了一个WSDL代理服务,并使用“Try it!”特性对其进行了测试。

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

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

    为了详细了解发生了什么,我激活了ESB的“SOAP消息跟踪器”。突然,我的服务器端脚本可以通过ESB代理访问Web服务。然后我停用了“SOAP消息跟踪器”,错误消息再次返回。我的服务器端脚本是否正确?或者调试工具是否修改已调试代码的行为?

    我是一名JavaScript开发人员。事实上,Jaggery和UES针对的是像我这样的人。我不应该查看Java代码内部,是吗?是否有JavaScript开发人员讨论WSO2UES和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 回复  |  直到 4 年前
        1
  •  0
  •   Jean-Michel    11 年前

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

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

    • 您可以在WSO2 ESB中的代理conf(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"/>