如何在Worklight服务器适配器上执行XMLHttpRequest



这是我的适配器代码

var fetchCommand = WL.Server.createSQLStatement("select * from basis_customers WHERE ID = ?");
function fetchData(param) {
      var xmlhttp = new XMLHttpRequest();
      xmlhttp.open('POST', 'http://ectest556ws1:9081/teamworks/webservices/POCODM/MobilityWS.tws', true);
      // build SOAP request
      var sr = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mob="http://POCODM/MobilityWS.tws">'+
'<soapenv:Header/>'+
'<soapenv:Body>'+
'<mob:startProcess>'+
   '<mob:nombre>1111</mob:nombre>'+
   '<mob:cedula>2222</mob:cedula>'+
'</mob:startProcess>'+
'</soapenv:Body>'+
'</soapenv:Envelope>' ;
      xmlhttp.onreadystatechange = function () {
          if (xmlhttp.readyState == 4) {
              jq(xmlhttp.responseText).find("startProcessResponse").each(function () {
                var el = jq(this);
                alert(el.find("outputMessage").text());
              });
          }
      };
      // Send the POST request
      xmlhttp.setRequestHeader('Content-Type', 'text/xml');
      xmlhttp.send(sr);
    return WL.Server.invokeSQLStatement({
        preparedStatement : fetchCommand,
        parameters : [param]
    });
}

我的SOAP WS工作得很好,但我不明白如何在我的Worklight适配器上调用XMLHttpRequest实例。但是当我调用它时,我得到了这个错误:

Procedure invocation error. Ecma Error: ReferenceError: "XMLHttpRequest" is not defined. (C%3A%5CUsers%5Csasahoo%5Cworkspace%5Cback%5Cadapters%5CPerson/Person-impl.js#33) worklight.js:4556
WL.Logger.__log worklight.js:4556
PUBLIC_API.(anonymous function) worklight.js:4643
onInvokeProcedureSuccess worklight.js:7112
window.WLJSX.Ajax.WLRequest.WLJSX.Class.create.onSuccess worklight.js:3225
window.WLJSX.Ajax.WLRequest.WLJSX.Class.create.onWlSuccess worklight.js:3197
(anonymous function) worklight.js:947
window.WLJSX.Ajax.Request.WLJSX.Class.create.respondToReadyState worklight.js:1156
window.WLJSX.Ajax.Request.WLJSX.Class.create.onStateChange worklight.js:1094
(anonymous function)

您正在尝试在Worklight Adapater环境中使用浏览器样式的代码,而您需要使用WL。服务器功能。

您将需要两个适配器:SQL适配器和HTTP适配器。你可以从一个呼叫到另一个

 SQLAdapter ---> HttpAdapter ---SOAP Reuqest---->  Your service

首先启动Http适配器。创建一个HTTP适配器,在其XML文件中指定您的域和端口,即ectest556ws1和9081。在适配器实现文件.js中,使用

    var input = {
    method : 'get',
    returnedContentType : 'xml',
    path : "teamworks/webservices/POCODM/MobilityWS.tws",
};

return WL.Server.invokeHttp(input);

注意,这是一个同步调用,您不使用回调方法。您可以使用Studio中的invokeProcedure功能进行测试。

然后在你的数据库适配器你可以调用跨HTTP适配器:

  var invocationData = {
        adapter : "myHttpAdapter",
        procedure : "myCallSoapMethod",
        parameters : [ may, be, some, parameters ]
    };
var soapResult =  WL.Server.invokeProcedure(invocationData);

最新更新