From 605ec59130d020417d83ff0c6a8006951042acc1 Mon Sep 17 00:00:00 2001 From: Tom Gallacher Date: Mon, 2 Nov 2015 12:02:06 +0000 Subject: [PATCH] Fixed issue when an error was undefined: undefined This occurs on responses that from what I can tell do not have an xsi:type of string, Thus these objects would not have an internal $value and would return undefined. This commit keeps backwards compatibility and falls back to assuming the error was a string. --- lib/wsdl.js | 6 +++--- test/request-response-samples-test.js | 1 + test/server-test.js | 2 ++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/wsdl.js b/lib/wsdl.js index 2f388f34a..af962f628 100644 --- a/lib/wsdl.js +++ b/lib/wsdl.js @@ -1418,9 +1418,9 @@ WSDL.prototype.xmlToObject = function(xml) { if (root.Envelope) { var body = root.Envelope.Body; if (body.Fault) { - var code = selectn('faultcode.$value', body.Fault); - var string = selectn('faultstring.$value', body.Fault); - var detail = selectn('detail.$value', body.Fault); + var code = selectn('faultcode.$value', body.Fault) || selectn('faultcode', body.Fault); + var string = selectn('faultstring.$value', body.Fault) || selectn('faultstring', body.Fault); + var detail = selectn('detail.$value', body.Fault) || selectn('detail.message', body.Fault); var error = new Error(code + ': ' + string + (detail ? ': ' + detail : '')); error.root = root; throw error; diff --git a/test/request-response-samples-test.js b/test/request-response-samples-test.js index a8fd0bc90..2a81b2cb1 100644 --- a/test/request-response-samples-test.js +++ b/test/request-response-samples-test.js @@ -110,6 +110,7 @@ function generateTest(name, methodName, wsdlPath, headerJSON, securityJSON, requ client[methodName](requestJSON, function(err, json, body, soapHeader){ if(requestJSON){ if (err) { + assert.notEqual('undefined: undefined', err.message); assert.deepEqual(err.root, responseJSON); } else { // assert.deepEqual(json, responseJSON); diff --git a/test/server-test.js b/test/server-test.js index b999ff9f9..8bd0a79df 100644 --- a/test/server-test.js +++ b/test/server-test.js @@ -290,6 +290,7 @@ describe('SOAP Server', function() { client.GetLastTradePrice({ tickerSymbol: 'SOAP Fault v1.2' }, function(err, response, body) { assert.ok(err); var fault = err.root.Envelope.Body.Fault; + assert.equal(err.message, fault.faultcode + ': ' + fault.faultstring); assert.equal(fault.Code.Value, "soap:Sender"); assert.equal(fault.Reason.Text, "Processing Error"); // Verify namespace on elements set according to fault spec 1.2 @@ -309,6 +310,7 @@ describe('SOAP Server', function() { client.GetLastTradePrice({ tickerSymbol: 'SOAP Fault v1.1' }, function(err, response, body) { assert.ok(err); var fault = err.root.Envelope.Body.Fault; + assert.equal(err.message, fault.faultcode + ': ' + fault.faultstring); assert.equal(fault.faultcode, "soap:Client.BadArguments"); assert.equal(fault.faultstring, "Error while processing arguments"); // Verify namespace on elements set according to fault spec 1.1