어댑터 에러 핸들러 추가

This commit is contained in:
curry772
2026-08-12 09:41:52 +09:00
parent e9261c55ad
commit 540ebdaf1f
2 changed files with 132 additions and 30 deletions
@@ -0,0 +1,99 @@
package com.eactive.eai.custom.adapter.handler;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Properties;
import org.apache.commons.lang3.StringUtils;
import com.eactive.eai.adapter.handler.TemplateCodeConvertAdapterErrorMsgHandler;
import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey;
import com.eactive.eai.common.message.EAIMessage;
import com.eactive.eai.common.message.EAIMessageKeys;
import com.eactive.eai.common.util.MessageUtil;
import com.eactive.eai.custom.message.StandardMessageCoordinatorDJB;
import com.eactive.eai.message.StandardItem;
import com.eactive.eai.message.StandardMessage;
import com.eactive.eai.message.manager.StandardMessageManager;
import com.eactive.eai.message.service.InterfaceMapper;
import com.eactive.eai.util.JsonPathUtil;
import com.fasterxml.jackson.databind.JsonNode;
public class DJbCommonAdapterErrorMsgHandler extends TemplateCodeConvertAdapterErrorMsgHandler {
/**
* 표준 -> 비표준 거래 아웃바운드 어댑터에서 Exception이 발생했을 때, Outbound Process 응답 메시지 생성
*/
@Override
public Object generateOutboundErrorResponseMessage(String outboundadapterGroupName, String outboundadapterName,
Properties callProp, Object outboundRequestData, EAIMessage resEaiMsg) throws Exception {
StandardMessage standardMessage = resEaiMsg.getStandardMessage();
@SuppressWarnings("unchecked")
Map<String, Object> map = (Map<String, Object>) callProp.get(HttpAdapterServiceKey.OUTBOUND_PROPERTY_MAP);
Object responseMessage = map.get(HttpAdapterServiceKey.OUTBOUND_RESPONSE_MESSAGE);
String rspErrCd = resEaiMsg.getRspErrCd();
String errorCode = StringUtils.defaultString(MessageUtil.getTobeCode(rspErrCd));
String errorMsg = StringUtils.defaultString(MessageUtil.getTobeMessage(rspErrCd));
String errorDesc = StringUtils.defaultString(MessageUtil.getTobeDesc(rspErrCd));
String errorLoc = StringUtils.substring(resEaiMsg.getRspErrMsg(), 0, 200);
JsonNode jsonNode = JsonPathUtil.toTree(responseMessage);
if (jsonNode != null) {
if(jsonNode.has("rspCode"))
errorCode = jsonNode.get("rspCode").asText();
if(jsonNode.has("rspMsg"))
errorMsg = jsonNode.get("rspMsg").asText();
if(jsonNode.has("outpMsgDesc"))
errorDesc = jsonNode.get("outpMsgDesc").asText();
}
// msg_dvcd = EM (에러메시지)
standardMessage.setData(StandardMessageCoordinatorDJB.MSG_DVCD, "EM");
// 출력속성코드 = 1(팝업)
standardMessage.setData(StandardMessageCoordinatorDJB.MSG_OUTP_ATRB_CD, "1");
StandardMessageManager manager = StandardMessageManager.getInstance();
InterfaceMapper mapper = manager.getMapper();
// mapper 에러코드 설정
mapper.setErrorCode(standardMessage, errorCode);
mapper.setErrorMsg(standardMessage, errorMsg);
// MSG_LIST 1건 구성
StandardItem msgList = standardMessage.findItem(StandardMessageCoordinatorDJB.MSG_LIST);
if(msgList == null) {
standardMessage.setData(StandardMessageCoordinatorDJB.MSG_LIST_ROWCNT, "1");
msgList = standardMessage.findItem(StandardMessageCoordinatorDJB.MSG_LIST);
}
if (msgList != null) {
msgList.setSize(1);
LinkedHashMap<String, StandardItem> row = msgList.getArrayChilds(0, true);
if (row != null) {
if (row.containsKey("outp_msg_cd"))
row.get("outp_msg_cd").setValue(errorCode);
if (row.containsKey("outp_msg_ctnt"))
row.get("outp_msg_ctnt").setValue(errorMsg);
if (row.containsKey("outp_msg_desc"))
row.get("outp_msg_desc").setValue(errorDesc);
if (row.containsKey("err_occu_loct"))
row.get("err_occu_loct").setValue(errorLoc);
}
}
// 성공 처리 처럼 진행한다.
resEaiMsg.setRspErrCd(EAIMessageKeys.EAI_SUCCESS_CODE, false);
// 응답 메시지 리턴
return "";
}
}
@@ -2,47 +2,50 @@ package com.eactive.eai.custom.adapter.handler;
import java.util.Properties;
import org.apache.commons.lang3.StringUtils;
import com.eactive.eai.adapter.handler.TemplateCodeConvertAdapterErrorMsgHandler;
import com.eactive.eai.common.message.EAIMessage;
import com.eactive.eai.common.util.Logger;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.eactive.eai.common.message.EAIMessageKeys;
import com.eactive.eai.custom.message.StandardMessageCoordinatorDJB;
import com.eactive.eai.message.StandardItem;
import com.eactive.eai.message.StandardMessage;
import com.eactive.eai.message.manager.StandardMessageManager;
import com.eactive.eai.message.service.InterfaceMapper;
public class ErpAdapterErrorMsgHandler extends TemplateCodeConvertAdapterErrorMsgHandler {
private static final Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER);
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
/**
* 표준 -> 비표준 거래
* 아웃바운드 어댑터에서 Exception이 발생했을 때, Outbound Process 응답 메시지 생성
*/
@Override
public Object generateNonStandardErrorResponseMessage(String inboundAdapterGroupName, String inboundAdapterName,
Properties callProp, Object outboundRequestData, EAIMessage resEaiMsg) throws Exception {
public Object generateOutboundErrorResponseMessage(String outboundadapterGroupName,
String outboundadapterName, Properties callProp, Object outboundRequestData, EAIMessage resEaiMsg)
throws Exception {
StandardMessage standardMessage = resEaiMsg.getStandardMessage();
// msg_dvcd = EM (에러메시지)
standardMessage.setData(StandardMessageCoordinatorDJB.MSG_DVCD, "NM");
Object responseMsessage = super.generateNonStandardErrorResponseMessage(inboundAdapterGroupName,
inboundAdapterName, callProp, outboundRequestData, resEaiMsg);
// 출력속성코드 = 1(팝업)
standardMessage.setData(StandardMessageCoordinatorDJB.MSG_OUTP_ATRB_CD, "1");
logger.debug("generateNonStandardErrorResponseMessage - {}", responseMsessage);
// MSG_LIST 1건 구성
standardMessage.setData(StandardMessageCoordinatorDJB.MSG_LIST_ROWCNT, "0");
StandardItem msgPart = standardMessage.findItem("MSG");
msgPart.getChilds().remove("MSG_LIST");
if (!(responseMsessage instanceof String)) {
return responseMsessage;
}
StandardMessageManager manager = StandardMessageManager.getInstance();
InterfaceMapper mapper = manager.getMapper();
// mapper 에러코드 설정
mapper.setErrorCode(standardMessage, "");
mapper.setErrorMsg(standardMessage, "처리오류");
String jsonStr = (String) responseMsessage;
if (StringUtils.isBlank(jsonStr)) {
return responseMsessage;
}
// 성공 처리 처럼 진행한다.
resEaiMsg.setRspErrCd(EAIMessageKeys.EAI_SUCCESS_CODE, false);
return null;
JsonNode rootNode = OBJECT_MAPPER.readTree(jsonStr);
boolean modified = false;
if (modified) {
responseMsessage = OBJECT_MAPPER.writeValueAsString(rootNode);
}
return responseMsessage;
}
}