Я пытаюсь сделать SOAP-запрос к внешнему API, используя node-soap.Элемент Root внутри Body взят из схемы WSDL.Можно ли как-то изменить его перед запросом?
Вот создание клиента и отправка запроса:
let client = await soap.createClientAsync(wsdl, soapClientOptions);
let result = await client.MakeCalculationAsync({});
console.log(result);
XML, созданный node-soap:
<soap:Body>
<IIntegrationService_MakeCalculation_InputMessage>
</IIntegrationService_MakeCalculation_InputMessage>
</soap:Body>
Но корневым элементом должно быть <MakeCalculation>
, а не <IIntegrationService_MakeCalculation_InputMessage>
, потому что в последнем случае ответ приводит к ошибке.
Я нашел какой-то обходной путь, который, на мой взгляд, довольно хитрый.Вы можете использовать postProcess метод для замены текста в xml следующим образом:
client.MakeCalculation({}, (err, result, rawResponse, soapHeader, rawRequest) => {
console.log(result);
}, {
postProcess: (_xml) => {
return _xml
.replace('IIntegrationService_MakeCalculation_InputMessage', 'MakeCalculation')
.replace('/IIntegrationService_MakeCalculation_InputMessage', '/MakeCalculation');
}
}
);
Но, как я уже сказал, это не очень хороший способ, и вы также не можете использовать его в асинхронном режиме.
PS Здесь был очень похожий вопрос Как мне настроить корневой элемент тела запроса мыла узла? Но все еще нет awnsers.