【问题标题】:Simple SOAP Client for consuming web services using javascript or java使用 javascript 或 java 使用 Web 服务的简单 SOAP 客户端
【发布时间】:2017-02-22 18:24:04
【问题描述】:

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

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

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

我尝试了什么:

  • 使用 Javascript,与 XMLHttpRequest();但我遇到了 CORS 问题

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

我的问题:

  • 我能否发出纯 Javascript Soap 请求而不会出现问题 跨域?? (有人告诉我这是不可能的,但我想 确认)

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

  • 如果我必须为这个请求创建一个 Java 类,我会有 像javascript一样阻止跨域请求?如果不是怎么 我应该这样做吗??。

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

Tomcat 中应用的域:

http://localhost:8080/AppWithWebServices/ws/core.wsdl --> 要使用的 Web 服务 http://localhost:8080/clientApp/soapRequest.js --> 包含对 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";
              }
          });
     });

};

【问题讨论】:

    标签: javascript java node.js web-services soap-client


    【解决方案1】:

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

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

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

    fs.readFileSync()
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多