我正在尝试使用soap
节点模块进行SOAP调用。我遇到的问题是我正在联系的服务需要明确的命名空间使用。以下是我使用该模块的方法:
var soap = require('soap')
soap.createClient('./SessionService.wsdl', function (err, sessionClient) {
sessionClient.LogIn({
'Input': {
'Username': userName,
'Password': password
}
}, function (err, result) {
// intentionally left blank
});
});
上面的代码生成以下SOAP信封。请注意Input,Username和Password元素如何不以命名空间为前缀。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://REDACTED/v2" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:q1="http://REDACTED/Service" xmlns:q2="http://REDACTED/Service" xmlns:q3="http://REDACTED/Service" xmlns:q4="http://REDACTED/Service">
<soap:Body>
<LogIn xmlns="http://REDACTED/v2">
<Input>
<Username>USERNAME</Username>
<Password>PASSWORD</Password>
</Input>
</LogIn>
</soap:Body>
</soap:Envelope>
这就是我所期待的:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://REDACTED/v2" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:q1="http://REDACTED/Service" xmlns:q2="http://REDACTED/Service" xmlns:q3="http://REDACTED/Service" xmlns:q4="http://REDACTED/Service">
<soap:Body>
<tns:LogIn xmlns="http://REDACTED/v2">
<tns:Input>
<q1:Username>USERNAME</q1:Username>
<q1:Password>PASSWORD</q1:Password>
</tns:Input>
</tns:LogIn>
</soap:Body>
</soap:Envelope>
是否有一些未记录的选项可用于生成正确的输出?如果我将命名空间放在JavaScript对象中,我可以获得正确的命名空间输入:
var soap = require('soap')
soap.createClient('./SessionService.wsdl', function (err, sessionClient) {
sessionClient.LogIn({
'tns:Input': {
'q1:Username': userName,
'q1:Password': password
}
}, function (err, result) {
});
});