Если node-soap
не работает для вас, просто используйте модуль node
request
и затем при необходимости конвертируйте xml в json.
Мой запрос не работал с node-soap
, и нет поддержки этого модуля, кроме платной поддержки, которая была за пределами моих ресурсов.Поэтому я сделал следующее:
- скачал SoapUI на мою Linux-машину.
- скопировал XML-файл WSDL в локальный файл
curl http://192.168.0.28:10005/MainService/WindowsService?wsdl > wsdl_file.xml
- В SoapUI я зашел на
File > New Soap project
и загрузил свой wsdl_file.xml
. - . В навигаторе я развернул одну из служб, щелкнул правой кнопкой мыши запрос и нажал
Show Request Editor
.
Оттуда я могу отправить запрос и убедиться, что он работает, и я также могу использовать данные Raw
или HTML
, чтобы помочь мне построить внешний запрос.
Raw из SoapUI для моегозапрос
POST http://192.168.0.28:10005/MainService/WindowsService HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "http://Main.Service/AUserService/GetUsers"
Content-Length: 303
Host: 192.168.0.28:10005
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
XML от SoapUI
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:qtre="http://Main.Service">
<soapenv:Header/>
<soapenv:Body>
<qtre:GetUsers>
<qtre:sSearchText></qtre:sSearchText>
</qtre:GetUsers>
</soapenv:Body>
</soapenv:Envelope>
Я использовал вышеупомянутое для построения следующего node
request
:
var request = require('request');
let xml =
`<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:qtre="http://Main.Service">
<soapenv:Header/>
<soapenv:Body>
<qtre:GetUsers>
<qtre:sSearchText></qtre:sSearchText>
</qtre:GetUsers>
</soapenv:Body>
</soapenv:Envelope>`
var options = {
url: 'http://192.168.0.28:10005/MainService/WindowsService?wsdl',
method: 'POST',
body: xml,
headers: {
'Content-Type':'text/xml;charset=utf-8',
'Accept-Encoding': 'gzip,deflate',
'Content-Length':xml.length,
'SOAPAction':"http://Main.Service/AUserService/GetUsers"
}
};
let callback = (error, response, body) => {
if (!error && response.statusCode == 200) {
console.log('Raw result', body);
var xml2js = require('xml2js');
var parser = new xml2js.Parser({explicitArray: false, trim: true});
parser.parseString(body, (err, result) => {
console.log('JSON result', result);
});
};
console.log('E', response.statusCode, response.statusMessage);
};
request(options, callback);