Как я могу принудительно использовать префикс пространства имен?

Я пытаюсь использовать SOAP Webservice, но WSDL немного нарушен, поэтому я должен выполнить некоторую настройку node-soap.

Идеальная конверсия SOAP, которую я хотел бы иметь, будет такой:

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
    <Body>
        <getImagesDefinition xmlns="http://services.example.com/"/>
    </Body>
</Envelope>

До сих пор это код nodejs, который я должен вызвать для службы:

var soap = require('soap');
var url = 'http://www.example.com/services/imagesizes?wsdl';

soap.createClient(url, function(err, client) {

    client.setEndpoint('http://www.example.com/services/imagesizes');
    client.getImagesDefinition(null, function(err, result) {
        console.log(result);
    });
    console.log(client.lastRequest)

}); 

Мне пришлось установить конечную точку вручную, потому что она сломана в файле WSDL

Конверт, который я получаю при печати client.lastRequest, таков:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
               xmlns:tns="http://services.example.com/">
    <soap:Body>
        <getImagesDefinition />
    </soap:Body>
</soap:Envelope>

Я знаю, что если я могу заставить префикс пространства имен на теле иметь <tns:getImagesDefinition /> вместо <getImagesDefinition />, запрос работает отлично.

Есть ли способ заставить меня?

Я прочитал документацию, в которой говорится, что tns - игнорируемое по умолчанию пространство имен, поэтому я попытался изменить это, выполнив следующее:

var options = {
    ignoredNamespaces: {
        namespaces: [],
        override: true
    }
}

и отправка этого объекта методу soap.createClient, но я не вижу разницы в конверте.

В любом случае для меня это необходимо? или добраться до идеального конверта SOAP?

Спасибо!

Ответ 1

Я столкнулся с этой точной проблемой, и для меня было исправлено игнорирование игнорируемых пространств имен - для удаления "tns" в качестве игнорируемого пространства имен.

var options = { 
  ignoredNamespaces: {
    namespaces: ['targetNamespace', 'typedNamespace'],
    override: true
  }
}

Я не уверен, почему это не сработало для вас, но, возможно, в библиотеке появилась ошибка, которая с тех пор была исправлена. Или, может быть, потому, что вы не указали какие-либо пространства имен, а скорее пустой массив.