Узел soap сервер, удалить пространство имен из ответа - PullRequest
1 голос
/ 29 января 2020

Я создаю 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');
});

Но это действительно очень плохо: (

...