如何用Nodejs写soap的client端?
如何用Nodejs写soap的client端?
原来是用java写的,现在初学node.js,要改写。怎么弄啊,哪位大侠可以指点一下?原来的那个xml文档里面的内容要怎么写到args里面呢?还有Header里面的东西。 headers.setHeader(“Content-Type”,“text/xml”); headers.setHeader(“SOAPAction”,“http://xxx.com/runQuery”);
文档太少了。用的是node.js v0.10.7和milewise的soap模块。
var soap = require(‘soap’); var url = ‘http://xxx.com/xxx.asmx’; var args = {xxx:‘abc’}; soap.createClient(url, function(err, client) { client.RunQuery(args, function(err, result) { console.log(result); }); });
报错: Error: Unexpected root element of WSDL or include at null.<anonymous> (/home/taxi/nodeapp/node_modules/soap/lib/wsdl.js:907:23) at EventEmitter.emit (events.js:98:17) at Parser.parse (/home/taxi/nodeapp/node_modules/soap/node_modules/node-expat/lib/node-expat.js:18:22) at WSDL._parse (/home/taxi/nodeapp/node_modules/soap/lib/wsdl.js:920:12) at WSDL._fromXML (/home/taxi/nodeapp/node_modules/soap/lib/wsdl.js:928:29) at /home/taxi/nodeapp/node_modules/soap/lib/wsdl.js:584:18 at process._tickCallback (node.js:415:13)
当然可以!下面是针对你的问题的详细解答,包括如何使用Node.js编写SOAP客户端。
如何用Node.js编写SOAP客户端
首先,你需要安装一个用于处理SOAP请求的库。常用的库有soap
,你可以通过npm来安装它:
npm install soap
接下来,我们将逐步讲解如何创建一个简单的SOAP客户端,并解决你提到的错误。
示例代码
假设你有一个WSDL文件地址 http://example.com/service.asmx?wsdl
,并且你想调用其中的一个方法 RunQuery
。
const soap = require('soap');
const url = 'http://example.com/service.asmx?wsdl';
// 定义请求参数
const args = {
Param1: 'value1',
Param2: 'value2'
};
// 创建SOAP客户端
soap.createClient(url, (err, client) => {
if (err) {
console.error("Error creating SOAP client:", err);
return;
}
// 设置请求头(如果需要)
client.setSecurity(new soap.BasicAuthSecurity('username', 'password'));
// 调用SOAP方法
client.RunQuery(args, (err, result) => {
if (err) {
console.error("Error calling RunQuery:", err);
return;
}
console.log("Result:", result);
});
});
解决WSDL解析错误
你提到的错误 Error: Unexpected root element of WSDL or include
通常是由于WSDL文件无法正确解析导致的。这可能是由于网络问题、WSDL文件格式问题或库版本问题。
- 检查WSDL URL:确保URL是可访问的,且返回有效的WSDL文件。
- 更新库版本:尝试更新
soap
库到最新版本。 - 调试WSDL解析:可以打印WSDL文件内容,查看是否有解析错误。
const request = require('request');
request(url, (error, response, body) => {
if (error) {
console.error("Error fetching WSDL:", error);
return;
}
console.log(body); // 打印WSDL内容以供调试
});
XML文档中的内容
如果你需要将特定的XML内容作为参数传递,可以使用xml
模块来构建XML字符串,并将其作为参数传递给SOAP方法。
const xmlbuilder = require('xmlbuilder');
const xml = xmlbuilder.create('RunQuery')
.att('xmlns', 'http://example.com')
.ele('Param1', 'value1')
.ele('Param2', 'value2')
.end({ pretty: true });
client.RunQuery({ xml: xml }, (err, result) => {
if (err) {
console.error("Error calling RunQuery:", err);
return;
}
console.log("Result:", result);
});
以上就是如何使用Node.js编写SOAP客户端的基本步骤和解决常见问题的方法。希望这些示例代码能帮助你顺利迁移你的Java代码到Node.js。
顶下
好像没有必要自己写一个 https://npmjs.org/browse/keyword/soap
有可能是你的url写的不对
时间过去一年了,不知楼主当时的node soap项目怎么样了,我现在遇到的项目是个老项目,也要soap,有一些问题希望能向楼主请教请教
meteor项目中内嵌了soap使用ws没问题,跟IBM双通。 meteor内嵌的也是通过这个nodejs包改的。
现在很多协议都比soap强,http也很好使,更不用说Hessian
soap就是渣渣:(
你可以使用 soap
模块来创建一个 SOAP 客户端。以下是如何实现这一功能的步骤和示例代码:
步骤
-
安装
soap
模块:首先你需要安装soap
模块。你可以使用 npm 来安装它:npm install soap
-
创建客户端:使用
soap.createClient
方法来创建一个 SOAP 客户端。 -
调用服务方法:通过客户端调用特定的服务方法,并传递参数。
示例代码
// 导入soap模块
const soap = require('soap');
// 服务URL
const url = 'http://example.com/service.asmx?wsdl';
// 参数
const args = {
param1: 'value1',
param2: 'value2'
};
// 设置请求头
const headers = {
'Content-Type': 'text/xml',
'SOAPAction': 'http://example.com/action'
};
// 创建SOAP客户端
soap.createClient(url, (err, client) => {
if (err) {
console.error('创建客户端时发生错误:', err);
return;
}
// 调用服务方法
client.runQuery(args, headers, (err, result) => {
if (err) {
console.error('调用服务方法时发生错误:', err);
return;
}
// 输出结果
console.log('服务返回的结果:', result);
});
});
解释
soap.createClient
方法用于创建一个 SOAP 客户端。第一个参数是 WSDL URL,第二个参数是回调函数。args
是传递给服务方法的参数对象。headers
是包含请求头的对象,如Content-Type
和SOAPAction
。- 在回调函数中,你可以调用服务的方法并处理返回的结果或错误。
常见问题及解决方案
如果你遇到类似 Unexpected root element of WSDL or include
的错误,这通常意味着 WSDL 文件格式有问题或无法正确解析。你可以尝试以下几种方法:
- 检查 WSDL URL:确保 WSDL URL 是正确的,并且可以从浏览器访问。
- 使用其他 WSDL 解析器:如果当前的 WSDL 文件解析存在问题,可以考虑使用其他 WSDL 解析库,如
node-wsdl
。 - 更新依赖项:确保你使用的
soap
模块和其他依赖项都是最新的版本。
希望这些信息对你有所帮助!