Как изменить определенный в WSDL-схеме корневой элемент тела мыльного запроса, используя node-soap - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь сделать 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.

...