我正在尝试使用npm soap包创建一系列端点到远程服务器,我可以通过角度4进行交互。我已经阅读了文档,但我仍然不清楚它的用法。下面是WSDL。如何创建可用于与下面的端点连接的客户端?这是WSDL。
http://208.180.122.191:8081/niku/wsdl/Query/ts_pending_approvals?tenantId=clarity
我的期望是我应该得到以下回复:
var soap = require('soap');
var url = 'http://208.180.122.191:8081/niku/wsdl/Query/ts_pending_approvals?tenantId=clarity';
var args = {Username: "jdoe", Password: "*******"};
soap.createClient(url, function(err, client) {
client.Login(args, function(err, result) {
console.log(result);
});
});
当我调用console.log(client.describe())时,我得到以下内容:
{ ts_pending_approvalsQueryService:
{ ts_pending_approvalsQueryService:
{ Query: [Object],
Login: [Object],
WrappedLogin: [Object],
Logout: [Object] } } }
然而,当我呼叫登录并传递用户名和密码时,我得到了未定义。使用SoapUI,我能够使用以下方法成功完成请求。我的问题是如何在节点中模拟这个。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:quer="http://www.niku.com/xog/Query">
<soapenv:Header/>
<soapenv:Body>
<quer:Login>
<quer:Username>jdoe</quer:Username>
<quer:Password>******</quer:Password>
</quer:Login>
</soapenv:Body>
</soapenv:Envelope>
答案 0 :(得分:0)
我能够通过设置端点来自行解决这个问题,该端点为我提供了预期的响应令牌:6312078__98C024DA-25CF-441E-A47B-A84DDE2FF140
var soap = require('soap');
var url = 'http://208.180.122.191:8081/niku/wsdl/Query/ts_pending_approvals';
var args = {Username: "jdoe", Password: "*****"};
soap.createClient(url, function(err, client) {
client.setEndpoint("http://208.180.122.191:8081/niku/xog")
client.Login(args,(error,result)=>{
if (error) throw error;
console.log(result)
})
});
值得注意的是,当您使用该包并发送其他参数时,除了需要多个参数的复杂结构之外,您还可能必须发送映射到WSDL中指定的命名空间的标头。 。经过一番试验和错误,我能够弄清楚这一点。见下面的工作示例:
/////////////////////////////////////////////////////////////////////////////////////////////////////
// 1TS Open Timesheet
ppmRouter.get("/open_time_sheet",(req,res,next) => {
var resourceid = req.query.param_resourceid
var soap = require('soap');
var url = config.wsdlQueryPath + 'open_time_sheet';
var sheader = { Auth: {Username: config.xog_user, Password: config.password}}
var args = {
Query: {Code: "open_time_sheet"},
Filter: {
param_resourceid: resourceid
}
};
soap.createClient(url, function(err, client) {
client.addSoapHeader(sheader,"","tns","Auth");
client.setEndpoint(config.xog_url)
client.Query(args,(error,result)=>{
if (error) throw error;
console.log(result)
res.send(result)
})
});
})