我正在尝试使用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?,但仍然没有遮篷。