From d52ce536f942508dad48f1afff2afc9665014607 Mon Sep 17 00:00:00 2001 From: Suraj Shrestha Date: Mon, 19 Aug 2019 14:38:39 -0400 Subject: [PATCH] Call callback even if there is exception --- lib/fuel-soap.js | 99 +++++++++++++++++++++++++----------------------- 1 file changed, 52 insertions(+), 47 deletions(-) diff --git a/lib/fuel-soap.js b/lib/fuel-soap.js index 71bf6c7..7873c1e 100644 --- a/lib/fuel-soap.js +++ b/lib/fuel-soap.js @@ -555,67 +555,72 @@ FuelSoap.prototype._parseResponse = function(key, body, callback) { }; parseString(body, parseOptions, function(err, res) { - if(err) { - err.errorPropagatedFrom = 'xml2js.parseString'; - callback(err, null); - return; - } + try{ + if(err) { + err.errorPropagatedFrom = 'xml2js.parseString'; + callback(err, null); + return; + } + + var soapError; + var soapBody = res['soap:Envelope']['soap:Body']; - var soapError; - var soapBody = res['soap:Envelope']['soap:Body']; + // Check for SOAP Fault + if(soapBody['soap:Fault']) { + var fault = soapBody['soap:Fault']; + soapError = new Error(fault.faultstring); + soapError.faultstring = fault.faultstring; + soapError.faultCode = fault.faultcode; - // Check for SOAP Fault - if(soapBody['soap:Fault']) { - var fault = soapBody['soap:Fault']; - soapError = new Error(fault.faultstring); - soapError.faultstring = fault.faultstring; - soapError.faultCode = fault.faultcode; + if(fault.detail) { + soapError.detail = fault.detail; + } - if(fault.detail) { - soapError.detail = fault.detail; + soapError.errorPropagatedFrom = 'SOAP Fault'; + callback(soapError, null); + return; } - soapError.errorPropagatedFrom = 'SOAP Fault'; - callback(soapError, null); - return; - } + var parsedRes = soapBody[key]; - var parsedRes = soapBody[key]; + if(key === 'DefinitionResponseMsg') { + // Return empty object if no ObjectDefinition is returned. + parsedRes.ObjectDefinition = parsedRes.ObjectDefinition || {}; + callback(null, parsedRes); + return; + } - if(key === 'DefinitionResponseMsg') { - // Return empty object if no ObjectDefinition is returned. - parsedRes.ObjectDefinition = parsedRes.ObjectDefinition || {}; - callback(null, parsedRes); - return; - } + // Results should always be an array + parsedRes.Results = Array.isArray(parsedRes.Results) ? parsedRes.Results : isObject(parsedRes.Results) ? [parsedRes.Results] : []; - // Results should always be an array - parsedRes.Results = Array.isArray(parsedRes.Results) ? parsedRes.Results : isObject(parsedRes.Results) ? [parsedRes.Results] : []; + if(key === 'RetrieveResponseMsg') { + if(parsedRes.OverallStatus === 'OK' || parsedRes.OverallStatus === 'MoreDataAvailable') { + callback(null, parsedRes); + } else { + // This is an error + soapError = new Error(parsedRes.OverallStatus.split(':')[1].trim()); + soapError.requestId = parsedRes.RequestID; + soapError.errorPropagatedFrom = 'Retrieve Response'; + callback(soapError, null); + } + return; + } - if(key === 'RetrieveResponseMsg') { - if(parsedRes.OverallStatus === 'OK' || parsedRes.OverallStatus === 'MoreDataAvailable') { - callback(null, parsedRes); - } else { - // This is an error - soapError = new Error(parsedRes.OverallStatus.split(':')[1].trim()); + if(parsedRes.OverallStatus === 'Error' || parsedRes.OverallStatus === 'Has Errors') { + soapError = new Error('Soap Error'); soapError.requestId = parsedRes.RequestID; - soapError.errorPropagatedFrom = 'Retrieve Response'; + soapError.results = parsedRes.Results; + soapError.errorPropagatedFrom = key; callback(soapError, null); + return; } - return; - } - - if(parsedRes.OverallStatus === 'Error' || parsedRes.OverallStatus === 'Has Errors') { - soapError = new Error('Soap Error'); - soapError.requestId = parsedRes.RequestID; - soapError.results = parsedRes.Results; - soapError.errorPropagatedFrom = key; - callback(soapError, null); - return; - } - callback(null, parsedRes); + callback(null, parsedRes); + } catch(error){ + callback(err, null); + } }.bind(this)); + }; // Methods that need implementations