使用 java 脚本或 java 使用 Web 服务的简单 SOAP 客户端
Simple SOAP Client for consuming web services using javascript or java
我在一个桌面应用程序(使用 Electron 框架)中工作,该应用程序使用来自网络应用程序的服务,因为我使用 node.js soap 包来发出请求并且一切正常。
但突然有人要求我迁移桌面应用程序,使其成为仅限客户端的 Web 应用程序。
我的问题:
我不知道如何更改节点代码以使其在浏览器中工作。本人web开发经验不多,有很多疑惑和问题。
我试过的:
使用Java脚本,使用 XMLHttpRequest();但我遇到了 CORS 问题
使用 Browserify 捆绑代码,但我从 fs.readFileSync()
中收到错误
我的问题:
我可以在没有问题的情况下发出纯 Javascript Soap 请求吗
来自跨域?? (我被告知这是不可能的,但我想
确认)
有没有办法在浏览器中使用下面的代码(带有节点模块)? (使用
browserify 等工具)
如果我必须为这个请求做一个Java class,我是否有
像 javascript 这样的跨域请求被阻止了??如果不是怎么办
我应该这样做吗??.
如果可能的话,我想要代码示例或架构应该如何的解释
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.
我在一个桌面应用程序(使用 Electron 框架)中工作,该应用程序使用来自网络应用程序的服务,因为我使用 node.js soap 包来发出请求并且一切正常。
但突然有人要求我迁移桌面应用程序,使其成为仅限客户端的 Web 应用程序。
我的问题: 我不知道如何更改节点代码以使其在浏览器中工作。本人web开发经验不多,有很多疑惑和问题。
我试过的:
使用Java脚本,使用 XMLHttpRequest();但我遇到了 CORS 问题
使用 Browserify 捆绑代码,但我从 fs.readFileSync()
中收到错误
我的问题:
我可以在没有问题的情况下发出纯 Javascript Soap 请求吗 来自跨域?? (我被告知这是不可能的,但我想 确认)
有没有办法在浏览器中使用下面的代码(带有节点模块)? (使用 browserify 等工具)
如果我必须为这个请求做一个Java class,我是否有 像 javascript 这样的跨域请求被阻止了??如果不是怎么办 我应该这样做吗??.
如果可能的话,我想要代码示例或架构应该如何的解释
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.