使用 java 脚本或 java 使用 Web 服务的简单 SOAP 客户端

Simple SOAP Client for consuming web services using javascript or java

我在一个桌面应用程序(使用 Electron 框架)中工作,该应用程序使用来自网络应用程序的服务,因为我使用 node.js soap 包来发出请求并且一切正常。

但突然有人要求我迁移桌面应用程序,使其成为仅限客户端的 Web 应用程序。

我的问题: 我不知道如何更改节点代码以使其在浏览器中工作。本人web开发经验不多,有很多疑惑和问题。

我试过的:

我的问题:

如果可能的话,我想要代码示例或架构应该如何的解释

Tomcat中的应用域:

http://localhost:8080/AppWithWebServices/ws/core.wsdl --> 要使用的 Web 服务 http://localhost:8080/clientApp/soapRequest.js --> 包含对 Web 服务的请求的文件

来自我的桌面应用程序的代码和 soap 请求 (soapRequest.js):

var soap = require('soap');
var request = require('request');
const {ipcRenderer} = require('electron');
window.ipc = ipcRenderer;

Submit = function (){
    var user = document.getElementById("username").value;
    var passw = document.getElementById("password").value;

    //Class with the wsdl url and the header and body for the request
    var auth = new authentication(user,passw);

    soap.createClient(auth.getWsdlURL(), function(err, soapClient){
       if (err){
            console.log("error en creacion cliente Soap");
       }

         //The soap request needs a security header with user and password 
         //to be able to consume the web services
         soapClient.addSoapHeader(auth.getSoapHeader());

         soapClient.ServiceToConsume(auth.soapRequestBody(), function(err, result) {
              if (!err){     
                 //Redirect to Home.html             
                 ipc.send('redirectHome', user, result);
              }
              else{            
                document.getElementById("login").innerHTML = "El nombre de usuario o contraseña es incorrecto";
              }
          });
     });

};

正如 soap 库的 the readme page 所说,它是

A SOAP client and server for node.js.

考虑到您的错误消息,它似乎依赖于节点的文件系统API:

fs.readFileSync()

除非库支持它,否则您将很难在浏览器中启动和 运行ning,因为节点的 API 在此环境中不一定可用。

您可以寻找能够在浏览器中 运行 的不同 SOAP 库。然而,JavaScript 和 SOAP 永远无法完美地结合在一起。在较长的 运行 中,您最好在服务器端实现一个中间件,将您的 SOAP 服务映射到一个 RESTful 服务,以 JSON 格式提供您的数据,您可以轻松地从您的没有特殊库的前端。

关于 CORS 问题,无论 HTTP 调用的目的如何,从不同来源加载文件时都可以避免此限制。 MDN gives some more details on this topic.