2016-11-25 7 views
2

d'abord désolé pour mon anglais, ensuite j'ai une question sur l'utilisation de SOAP dans Node.js. Je suis un débutant avec node.js et j'ai besoin d'aide. Ceci est ma fonction:Impossible d'analyser la réponse SOAP Node.js

var soap = require('soap'); 

var url = 'http://SOMETHING?wsdl';

var args = { 
    accountId: 'xxxxx', 
    userName: 'xxxxx', 
    password: 'xxxxxx', 
    targetNSAlias: 'tns', 
    targetNamespace: 'http://api.ilient.com/' 
}; 

soap.createClient(url, function(err, client) { 
    if(err) throw err;  
      client.login(args,function(err, result, raw, soapHeader){ 
      if(err) throw err; 
      console.log(result); 
    }); 
}); 

quand je cours, je reçois cette erreur:

Error: Cannot parse response 
at /root/node_modules/soap/lib/client.js:321:21 
at Request._callback (/root/node_modules/soap/lib/http.js:117:5) 
at Request.self.callback (/root/node_modules/request/request.js:186:22) 
at Request.emit (events.js:98:17) 
at Request.<anonymous> (/root/node_modules/request/request.js:1081:10) 
at Request.emit (events.js:95:17) 
at IncomingMessage.<anonymous> (/root/node_modules/request/request.js:1001:12) 
at IncomingMessage.g (events.js:180:16) 
at IncomingMessage.emit (events.js:117:20) 
at _stream_readable.js:944:16 

quelqu'un peut me aider à le résoudre? Merci et désolé pour mon anglais à nouveau.

Répondre

3

J'ai fait face à un problème similaire. Peut-être que le service Web SOAP que vous essayez de consommer possède la spécification v1.2 et il peut s'attendre à ce que le type de contenu soit application/soap + xml au lieu de text/xml. Afin de forcer le noeud-savon à utiliser la version SOAP 1.2, vous pouvez ajouter forceSoap12Headers: true parmi createClient() paramètres.

Sur une note côté, je devais ajouter les WS-Addressing têtes à en-tête de savon à cause de Le message avec A « » ne peut pas être traité au niveau du récepteur, en raison d'une non-concordance de AddressFilter à l'erreur EndpointDispatcher.

Je modifié votre code comme suit:

var soap = require('soap'); 
var url = 'http://SOMETHING?wsdl'; 
var args = { 
    accountId: 'xxxxx', 
    userName: 'xxxxx', 
    password: 'xxxxxx', 
    targetNSAlias: 'tns', 
    targetNamespace: 'http://api.ilient.com/' 
}; 

var soapOptions = { 
    forceSoap12Headers: true 
}; 

var soapHeaders = { 
    'wsa:Action': 'http://tempuri.org/MyPortName/MyAction', 
    'wsa:To': 'http://SOMETHING.svc' 
}; 

soap.createClient(url, soapOptions, function(err, client) { 
    if(err) throw err; 
    client.addSoapHeader(soapHeaders, '', 'wsa', 'http://www.w3.org/2005/08/addressing'); 
    client.login(args, function(err, result, raw){ 
     if(err) throw err; 
     console.log(result); 
    }); 
}); 
0

Ajouter ce code: client.setSecurity(new soap.BasicAuthSecurity('username', 'password')); après votre création code client. Cela a fonctionné pour moi:

var soap = require('soap'); 
var url = 'http://SOMETHING?wsdl'; 
soap.createClient(url, function(err, client) { 
if(err) throw err; 
    client.setSecurity(new soap.BasicAuthSecurity('username', 'password')); 
    client.login(args, function(err, result) { 
    if(err) throw err; 
     console.log(result); 
    }); 
});