如何使用node-soap更改soap请求主体的WSDL模式Root元素中定义的

时间:2019-05-27 12:28:04

标签: node.js soap wsdl node-soap

我正在尝试使用node-soap向外部API发出SOAP请求。 Body内的Root元素取自WSDL模式。是否可以在请求之前以某种方式进行更改?

这是客户端的创建和请求发送:

let client = await soap.createClientAsync(wsdl, soapClientOptions);
let result = await client.MakeCalculationAsync({});
console.log(result);

node-soap生成的XML是:

<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');
            }
          }
        );

但是正如我所说,这不是一个好方法,您也不能以异步方式使用它。

P.S。这里有一个非常类似的问题How can I configure the Root Element of a node-soap request body?,但仍然没有遮篷。

0 个答案:

没有答案