[英]Npm soap package - constructing XML request with WSSecurity instance header
[英]npm soap with auth header
我正在嘗試給我們npm soap軟件包創建一系列我可以通過angular 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] } } }
但是,當我打電話給login並傳遞用戶名和密碼時,我無法定義。 使用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>
我可以通過設置端點自行解決此問題,該端點為我提供了預期的響應令牌: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)
})
});
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.