Я создаю soap сервер, используя 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, как в примере здесь , который, кажется, делает именно то, что я хочу, но в моей стороне это не работает ... Я использовал это так:
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');
});
Но это действительно очень плохо: (