我正在使用vpulim / node-soap创建一个肥皂服务器。
除了一件事,一切都很好。
我的请求结果是这样的:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://tempuri.org/">
<soap:Body>
<tns:StatelessImportEntityResponse>
<tns:return>something</tns:return>
</tns:StatelessImportEntityResponse>
</soap:Body>
</soap:Envelope>
但是打电话给我的客户端需要这样:(区别是从返回标记中删除了'tns'名称空间)
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://tempuri.org/">
<soap:Body>
<tns:StatelessImportEntityResponse>
<return>something</return>
</tns:StatelessImportEntityResponse>
</soap:Body>
</soap:Envelope>
因此,我试图删除名称空间,但是没有成功,我尝试使用overrideRootElement wsdl选项,如示例here所示,该示例似乎确实可以完成我想要的操作,但对我而言却无法正常工作。 .. 我这样使用它:
soap.listen(mailRouterServer.server, {
path: '/mailRouter',
services,
xml,
overrideRootElement: {
namespace: 'xmlns:tns',
xmlnsAttributes: [{
name: 'xmlns:ns2',
value: 'http://tempuri.org/'
}, {
name: 'xmlns:ns3',
value: 'http://sillypets.com/xsd'
}]
}
})
目前,我将其用作解决方法:
soapServer.on('response', (response) => {
response.result = response.result.replace(/tns:return/g, 'return');
});
但是感觉真的很糟糕:(