简单的SOAP客户端,用于使用JavaScript或Java来使用Web服务

我在一个桌面应用程序(与Electron框架),从Web应用程序使用服务,因为我使用node.js肥皂包进行请求,一切运作良好。

但突然间,我被要求迁移桌面应用程序,使其成为一个客户端的networking应用程序。

我的问题:我不知道如何改变节点代码,使其在浏览器中工作。 我对Web开发有一点经验,我有很多疑问和问题。

我试过的:

  • 使用Javascript,使用XMLHttpRequest(); 但是我得到CORS问题

  • 使用Browserify捆绑代码,但我从fs.readFileSync()中得到一个错误

我的问题:

  • 我可以做一个纯粹的JavaScript肥皂请求,而不会有跨越来源问题? (我被告知这是不可能的,但我想确认)

  • 有没有办法在浏览器中使用下面的代码(与节点模块)? (使用像browserify的工具)

  • 如果我不得不为这个请求做一个Java类,我会有像javascript一样的跨源请求吗? 如果不是我该怎么做呢?

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

Tomcat中的应用程序域:

http:// localhost:8080 / AppWithWebServices / ws / core.wsdl – >使用http:// localhost:8080 / clientApp / soapRequest.js的Web服务 – >请求到Web服务的文件

来自我的桌面应用程序的肥皂请求(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库的自述页面所说的那样

用于node.js的SOAP客户端和服务器

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

 fs.readFileSync() 

除非这个库支持它,否则你将很难在浏览器中启动并运行它,因为在这个环境中节点的API不一定是可用的。

您可以查找能够在浏览器中运行的不同的SOAP库。 但是,JavaScript和SOAP永远不会一起玩。 从长远来看,在服务器端实现一个中间件可能会更好,它将SOAP服务映射到以JSON格式提供数据的RESTful服务,您可以从前端轻松使用这些服务,而无需使用特殊的库。

关于CORS问题,在加载来自不同来源的文件时,可以避免这种限制,而与HTTP调用的目的无关。 MDN给出了有关这个主题的更多细节。