diff options
author | ChrisC <cc697w@intl.att.com> | 2017-01-31 11:40:03 +0100 |
---|---|---|
committer | ChrisC <cc697w@intl.att.com> | 2017-01-31 12:59:33 +0100 |
commit | 025301d08b061482c1f046d562bf017c8cbcfe8d (patch) | |
tree | 68a2a549736c9bf0f7cd4e71c76e40ef7e2606f2 /bpmn/MSOGammaBPMN/src/main/groovy/com/att/bpm/scripts/CommonExceptionUtil.groovy | |
parent | 2754ad52f833278a5c925bd788a16d1dce16a598 (diff) |
Initial OpenECOMP MSO commit
Change-Id: Ia6a7574859480717402cc2f22534d9973a78fa6d
Signed-off-by: ChrisC <cc697w@intl.att.com>
Diffstat (limited to 'bpmn/MSOGammaBPMN/src/main/groovy/com/att/bpm/scripts/CommonExceptionUtil.groovy')
-rw-r--r-- | bpmn/MSOGammaBPMN/src/main/groovy/com/att/bpm/scripts/CommonExceptionUtil.groovy | 382 |
1 files changed, 382 insertions, 0 deletions
diff --git a/bpmn/MSOGammaBPMN/src/main/groovy/com/att/bpm/scripts/CommonExceptionUtil.groovy b/bpmn/MSOGammaBPMN/src/main/groovy/com/att/bpm/scripts/CommonExceptionUtil.groovy new file mode 100644 index 0000000000..fae12c343e --- /dev/null +++ b/bpmn/MSOGammaBPMN/src/main/groovy/com/att/bpm/scripts/CommonExceptionUtil.groovy @@ -0,0 +1,382 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package com.att.bpm.scripts + +import org.camunda.bpm.engine.runtime.Execution +import org.apache.commons.lang3.* + +class CommonExceptionUtil { + + + + public static enum Error { + SVC_GENERAL_SERVICE_ERROR("SVC0001","Internal Error"), + SVC_BAD_PARAMETER("SVC0002", "Invalid input value for message part %1"), + SVC_NO_SERVER_RESOURCES("SVC1000", "No server resources available to process the request"), + SVC_DETAILED_SERVICE_ERROR("SVC2000", "The following service error occurred: %1. Error code is %2."), + POL_GENERAL_POLICY_ERROR("POL0001", "A policy error occurred."), + POL_USER_NOT_PROVISIONED("POL1009", "User has not been provisioned for service"), + POL_USER_SUSPENDED("POL1010", "User has been suspended from service"), + POL_DETAILED_POLICY_ERROR("POL2000", "The following policy error occurred: %1. Error code is %2."), + POL_MSG_SIZE_EXCEEDS_LIMIT("POL9003", "Message content size exceeds the allowable limit") + + + private final String msgId + private final String msgTxt + + private Error(String msgId, String msgTxt) { + this.msgId = msgId + this.msgTxt = msgTxt + } + + public String getMsgId() { + return msgId + } + + public String getMsgTxt() { + return msgTxt + } + + } + + + + + String mapAdapterExecptionToCommonException(String response, Execution execution) + { + def utils=new MsoUtils() + def method = getClass().getSimpleName() + '.mapAdapterExecptionToCommonException(' + + 'execution=' + execution.getId() + + ')' + + def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') + utils.log("DEBUG",'Entered ' + method, isDebugLogEnabled) + + + def errorCode + + + try { + errorCode = MapCategoryToErrorCode(utils.getNodeText(response, "category")) + execution.setVariable(prefix+"err",errorCode) + String message = buildException(response, execution) + utils.log("DEBUG","=========== End MapAdapterExecptionToWorkflowException ===========",isDebugLogEnabled) + return message + }catch (Exception ex) { + //Ignore the exception - cases include non xml payload + utils.log("DEBUG","error mapping error, ignoring: " + ex,isDebugLogEnabled) + utils.log("DEBUG","=========== End MapAdapterExecptionToWorkflowException ===========",isDebugLogEnabled) + return buildException(response, execution) + } + } + + /** + * @param response + * @param execution + * @return mapped exception + */ + String mapAOTSExecptionToCommonException(String response, Execution execution) + { + def utils=new MsoUtils() + + def prefix=execution.getVariable("prefix") + def method = getClass().getSimpleName() + '.mapAOTSExecptionToCommonException(' + + 'execution=' + execution.getId() + + ')' + + def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') + utils.log("DEBUG",'Entered ' + method, isDebugLogEnabled) + + + try { + def errorCode = utils.getNodeText(response,"code") + def descr = utils.getNodeText(response, "description") + def mappedErr = mapErrorCodetoError(errorCode, descr) + if(mappedErr == Error.SVC_DETAILED_SERVICE_ERROR || mappedError == Error.POL_DETAILED_POLICY_ERROR){ + ArrayList myVars = new ArrayList() + myVars.add(descr) + myVars.add(errorCode) + execution.setVariable(prefix+"errVariables", myVars) + } + execution.setVariable(prefix+"err",mappedErr) + def message = buildException("Received error from AOTS: " + descr, execution) + utils.log("DEBUG","=========== End MapAOTSExecptionToCommonException ===========",isDebugLogEnabled) + return message + }catch (Exception ex) { + //Ignore the exception - cases include non xml payload + utils.log("DEBUG","error mapping error, ignoring: " + ex,isDebugLogEnabled) + utils.log("DEBUG","=========== End MapAOTSExecptionToCommonException ===========",isDebugLogEnabled) + return buildException(response, execution) + } + } + + String mapSDNCAdapterExceptionToErrorResponse(String sdncAdapterCallbackRequest, Execution execution) { + def utils=new MsoUtils() + def prefix=execution.getVariable("prefix") + def method = getClass().getSimpleName() + '.mapSDNCAdapterExceptionToErrorResponse(' + + 'execution=' + execution.getId() + + ')' + + def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') + utils.log("DEBUG",'Entered ' + method, isDebugLogEnabled) + + def sdncResponseCode + String responseCode = execution.getVariable(prefix+"ResponseCode") + utils.log("DEBUG",'responseCode to map: ' + responseCode, isDebugLogEnabled) + def errorMessage + + try { + + if(utils.nodeExists(sdncAdapterCallbackRequest, "RequestData")) { + def reqDataXml = StringEscapeUtils.unescapeXml(utils.getNodeXml(sdncAdapterCallbackRequest, "RequestData")) + errorMessage = utils.getNodeText(reqDataXml, "response-message") + sdncResponseCode = utils.getNodeText(reqDataXml, "response-code") + }else{ + errorMessage = utils.getNodeText(sdncAdapterCallbackRequest, "ResponseMessage") + sdncResponseCode = responseCode + } + def mappedErr = mapErrorCodetoError(responseCode, errorMessage) + errorMessage = errorMessage.replace("&", "&").replace("<", "<").replace(">", ">") + def modifiedErrorMessage = "Received error from SDN-C: " + errorMessage + if(mappedErr == Error.SVC_DETAILED_SERVICE_ERROR || mappedErr == Error.POL_DETAILED_POLICY_ERROR){ + ArrayList myVars = new ArrayList() + myVars.add(errorMessage) + myVars.add(sdncResponseCode) + execution.setVariable(prefix+"errVariables", myVars) + } + execution.setVariable(prefix+"err",mappedErr) + def message = buildException(modifiedErrorMessage, execution) + + + utils.log("DEBUG","=========== End MapSDNCAdapterException ===========",isDebugLogEnabled) + return message + }catch (Exception ex) { + //Ignore the exception - cases include non xml payload + utils.log("DEBUG","error mapping sdnc error, ignoring: " + ex,isDebugLogEnabled) + utils.log("DEBUG","=========== End MapSDNCAdapterException ===========",isDebugLogEnabled) + return null + } + + } + + /** + * @param response message from called component (ex: AAI) + * @param execution + * @return an error response conforming to the common + */ + String mapAAIExceptionTCommonException(String response, Execution execution) + { + def utils=new MsoUtils() + def isDebugLogEnabled=execution.getVariable("isDebugLogEnabled") + def prefix=execution.getVariable("prefix") + def method = getClass().getSimpleName() + '.mapAAIExceptionTCommonException(' + + 'execution=' + execution.getId() + + ')' + + utils.log("DEBUG",'Entered ' + method, isDebugLogEnabled) + def variables + def message + String errorCode = 'SVC0001' + utils.log("DEBUG","response: " + response, isDebugLogEnabled) + //they use the same format we do, pass their error along + //TODO add Received error from A&AI at beg of text + try { + message = utils.getNodeXml(response, "requestError") + message = utils.removeXmlNamespaces(message) + } catch (Exception ex) { + //Ignore the exception - cases include non xml payload + message = buildException("Received error from A&AI, unable to parse",execution) + utils.log("DEBUG","error mapping error, ignoring: " + ex,isDebugLogEnabled) + } + + if(message != null) { + execution.setVariable(prefix+"ErrorResponse",message) + utils.log("ERROR","Fault:"+ execution.getVariable(prefix+"ErrorResponse")) + return message + } else { + + return null + + } + } + + /** + * @param execution + * @return an error response conforming to the common API with default text msg + */ + String buildException(execution){ + return buildException(null, execution) + } + + /** + * @param response message from called component (ex: AAI) + * @param execution + * @return an error response conforming to the common + */ + String buildException(response, execution){ + def utils=new MsoUtils() + def method = getClass().getSimpleName() + '.buildException(' + + 'execution=' + execution.getId() + + ')' + + def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') + utils.log("DEBUG",'Entered ' + method, isDebugLogEnabled) + def prefix=execution.getVariable("prefix") + def responseCode = String.valueOf(execution.getVariable(prefix+"ResponseCode")) + def variables + utils.log("DEBUG","response: " + response, isDebugLogEnabled) + + try { + utils.log("DEBUG","formatting error message" ,isDebugLogEnabled) + def msgVars = execution.getVariable(prefix+"errVariables") + def myErr = execution.getVariable(prefix+"err") + def messageTxt = execution.getVariable(prefix+"errTxt") + def messageId = null + + if(myErr == null){ + utils.log("DEBUG","mapping response code: " + responseCode, isDebugLogEnabled) + myErr = mapErrorCodetoError(responseCode, response) + if(myErr == null){ + //not a service or policy error, just return error code + return "" + } + } + messageId = myErr.getMsgId() + + if(messageTxt == null){ + if(myErr!=null){ + messageTxt = myErr.getMsgTxt() + }else{ + messageTxt = response + } + } + + if(msgVars==null && (myErr == Error.SVC_DETAILED_SERVICE_ERROR || myErr == Error.POL_DETAILED_POLICY_ERROR)){ + msgVars = new ArrayList() + msgVars.add(response) + msgVars.add(responseCode) + } + + def msgVarsXML="" + StringBuffer msgVarsBuff = new StringBuffer() + if(msgVars!=null){ + for(String msgVar : msgVars){ + msgVarsBuff.append( + """ + <tns:variables>${msgVar}</tns:variables>""") + } + + } + def message = "" + if(messageId.startsWith("SVC")){ + message = """<tns:requestError xmlns:tns="http://ecomp.att.com/mso/request/types/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ecomp.att.com/mso/request/types/v1 MsoServiceInstanceTypesV1.xsd"> + <tns:serviceException> + <tns:messageId>${messageId}</tns:messageId> + <tns:text>${messageTxt}</tns:text>${msgVarsBuff} + </tns:serviceException> +</tns:requestError>""" + }else{ + message ="""<tns:requestError xmlns:tns="http://ecomp.att.com/mso/request/types/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ecomp.att.com/mso/request/types/v1 MsoServiceInstanceTypesV1.xsd"> + <tns:policyException> + <tns:messageId>${messageId}</tns:messageId> + <tns:text>${messageTxt}</tns:text>${msgVarsBuff} + </tns:policyException> +</tns:requestError>""" + } + utils.log("DEBUG", "message " + message, isDebugLogEnabled) + execution.setVariable(prefix+"ErrorResponse",message) + execution.setVariable(prefix+"err", myErr) + execution.setVariable(prefix+"errTxt", messageTxt) + execution.setVariable(prefix+"errVariables", msgVars) + utils.log("ERROR","Fault:"+ execution.getVariable(prefix+"ErrorResponse")) + return message + }catch(Exception ex) { + utils.log("DEBUG","error mapping error, return null: " + ex,isDebugLogEnabled) + return null + } + + } + + String parseError(Execution execution){ + def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') + def utils=new MsoUtils() + def prefix=execution.getVariable("prefix") + def text = execution.getVariable(prefix+"errTxt") + def msgVars = execution.getVariable(prefix+"errVariables") + utils.log("DEBUG",'parsing message: ' + text, isDebugLogEnabled) + if(text == null){ + return 'failed' + } + if(msgVars!=null && !msgVars.isEmpty()){ + for(int i=0; i<msgVars.size(); i++){ + text = text.replaceFirst("%"+(i+1), msgVars[i]) + } + } + utils.log("DEBUG",'parsed message is: ' + text, isDebugLogEnabled) + return text + } + + + + Error mapErrorCodetoError(responseCode, descr) + { + + if(responseCode==null || responseCode=='0' || responseCode=='500' || responseCode =='408'){ + return Error.SVC_NO_SERVER_RESOURCES + }else if(responseCode == '401' || responseCode == '405' || responseCode == '409' || responseCode == '503'){ + return null + }else if(responseCode == '400'){ + if(descr==null){ + return Error.SVC_GENERAL_SERVICE_ERROR + }else{ + return Error.SVC_DETAILED_SERVICE_ERROR + } + }else if(responseCode == '401'){ + if(descr==null){ + return Error.POL_GENERAL_POLICY_ERROR + }else{ + return Error.POL_DETAILED_POLICY_ERROR + } + }else{ + return Error.SVC_NO_SERVER_RESOURCES + } + } + + String mapCategoryToErrorCode(String errorCategory) + { + if(errorCategory.equals('OPENSTACK')) + return Error.SVC_NO_SERVER_RESOURCES + else if (errorCategory.equals('IO')) + return Error.SVC_NO_SERVER_RESOURCES + else if (errorCategory.equals('INTERNAL')) + return Error.SVC_NO_SERVER_RESOURCES + else if (errorCategory.equals('USERDATA')) + return Error.SVC_GENERAL_SERVICE_ERROR + else + return Error.SVC_GENERAL_SERVICE_ERROR + } + + + + + + +} |