2014-11-19 3 views
11

Ich versuche, einen SOAP Webservice zu konsumieren, aber die WSDL ist irgendwie kaputt, also muss ich einige Anpassungen an node-soap vornehmen.Wie kann ich die Verwendung des Namespace-Präfixes erzwingen?

Der ideale SOAP-Umschlag, die Ich mag würde würde haben sein diese:

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

Bisher ist dies die nodejs Code, den ich den Dienst aufzurufen haben:

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) 

}); 

Ich musste Stellen Sie den Endpunkt manuell ein, da er in der WSDL Datei

unterbrochen ist Die Umschlag, den ich beim Drucken client.lastRequest bekomme, ist dies:

<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> 

Ich weiß, dass, wenn ich das Namespacepräfix auf dem Körper <tns:getImagesDefinition /> zu haben, anstatt die Anforderung von <getImagesDefinition /> zwingen kann, funktioniert perfekt.

Gibt es eine Möglichkeit für mich, es zu erzwingen?

las ich in der Dokumentation zu sagen, dass tns ein Standard-Namespace ignoriert, so dass ich versuchte, dass dadurch zu ändern:

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

und sendet dieses Objekt an die soap.createClient Methode, aber ich sehe keinen Unterschied auf die Briefumschlag.

Gibt es trotzdem für mich das zu erzwingen? oder zum idealen SOAP Envelope?

Danke!

Antwort

2

Siehe this Faden das gleiche Problem bei Github Diskussion:

Und vor allem https://github.com/vpulim/node-soap/issues/537#issuecomment-72041420

+2

Temporäre Lösung: Ändern Sie die Zeile 1047 in wsdl.js in: 'WSDL.prototype.ignoredNamespaces = ['targetNamespace', 'typedNamespace'];' –

+3

Diese Verknüpfung ist unterbrochen. Kannst du bitte etwas ausarbeiten? – analytik

+11

Aus diesem Grund sind Antworten, die nur Links enthalten, nicht hilfreich – Trev

3

ich in genau diesem Problem lief und für mich, das Update die ignoredNamespaces außer Kraft zu setzen war - ‚tns‘ zu entfernen, wie ein ignorierter Namespace

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

Ich bin mir nicht sicher, warum es nicht für Sie arbeiten, aber vielleicht ein Fehler in der Bibliothek gab es, die behoben seit wurde. Oder vielleicht, weil Sie keine Namespaces, sondern ein leeres Array enthalten haben.