diff --git a/src/main/java/com/eactive/eai/inbound/processor/RequestProcessor.java b/src/main/java/com/eactive/eai/inbound/processor/RequestProcessor.java index 66872e1..f2f06be 100644 --- a/src/main/java/com/eactive/eai/inbound/processor/RequestProcessor.java +++ b/src/main/java/com/eactive/eai/inbound/processor/RequestProcessor.java @@ -5,6 +5,7 @@ import java.util.Properties; import java.util.Set; import com.eactive.eai.common.TransactionContextKeys; +import com.eactive.eai.common.context.ElinkTransactionContext; import com.eactive.eai.common.util.*; import org.apache.commons.lang3.StringUtils; import org.springframework.http.HttpStatus; @@ -59,7 +60,7 @@ import org.json.simple.JSONObject; import java.util.HashMap; import java.util.Map; //import org.apache.commons.lang3.StringUtils; -//import org.springframework.http.HttpStatus; +//import org.springframework.http.HttpStatus; //import java.util.Calendar; //import java.util.Properties; @@ -75,7 +76,7 @@ import java.util.Map; * - 응답 거래로깅 * 3. 주의사항 * - * @author : + * @author : * @version : v 1.0.0 * @see : * @since : @@ -176,7 +177,7 @@ public class RequestProcessor extends RequestProcessorSupport { * @param prop 호출시 전달할 Property 값(추후 확장을 위해) * @param msgRcvTm 메시지 수신시각 * @return Object - * @throws Exception + * @throws Exception **/ protected Object hookup(Object message, Properties prop, long msgRcvTm) throws Exception { EAIMessage retEaiMsg = null; @@ -184,7 +185,7 @@ public class RequestProcessor extends RequestProcessorSupport { ProcessVO vo = setVO(prop, msgRcvTm); prop.setProperty(TransactionContextKeys.TRANSACTION_UUID, vo.getUuid()); - String inboundCharset = prop.getProperty(Keys.CHARSET_KEY_IN); + String inboundCharset = prop.getProperty(Keys.CHARSET_KEY_IN); // Unknown Message 로깅시 표준메시지일 경우 원본 자체를 남기기 위해 변수로 저장한다. // logUnknownMessage 호출시 사용하도록 함 @@ -199,7 +200,7 @@ public class RequestProcessor extends RequestProcessorSupport { } catch (Exception e1) { logger.error("deep copy error : " + e1.getMessage(), e1); } - + // 2. StandardMessage 생성 EAIServerManager eaiServerManager = EAIServerManager.getInstance(); StandardMessage standardMessage = null; @@ -207,17 +208,17 @@ public class RequestProcessor extends RequestProcessorSupport { StandardReader reader = null; InterfaceMapper mapper = standardManager.getMapper(); StandardMessage subMessage = null; - + if(Keys.IF_STANDARD.equals(vo.getStdMsgTypeCode())) { if (logger.isDebug()) logger.debug("RequestProcessor] Get Message from INPUT MESSAGE"); try { - standardMessage = standardManager.getStandardMessage(); - reader = standardManager.getReader(vo.getAdptrMsgType()); + standardMessage = standardManager.getStandardMessage(); + reader = standardManager.getReader(vo.getAdptrMsgType()); reader.parse(standardMessage, message); // 표준전문 파싱 후 어댑터의 charset을 설정한다. standardMessage.setBizDataCharset(inboundCharset); standardManager.getMessageCoordinator().coordinateAfterParsing(standardMessage, vo, prop); - + } catch(Exception e) { vo.setRspErrorCode("RECEAIIRP008"); vo.setRspErrorMsg(ExceptionUtil.make(e, vo.getRspErrorCode(), new String[]{ e.getMessage()})); @@ -226,7 +227,7 @@ public class RequestProcessor extends RequestProcessorSupport { logUnknownMessage(vo,orgMessage); throw new RequestProcessorException(vo.getRspErrorMsg()); } - } + } else { try { if(eaiServerManager.isTASEnabledEAIServer() && Keys.TESTMASTER_TAS.equals(vo.getTestMasterYn())) { //비표준 시뮬레이터 @@ -269,7 +270,7 @@ public class RequestProcessor extends RequestProcessorSupport { else { throw ex; } - } + } } else { if (logger.isInfo()) logger.info("RequestProcessor] The RequestAction is null in Adapter properties. - "+vo.getAdapterName()); } @@ -290,7 +291,7 @@ public class RequestProcessor extends RequestProcessorSupport { } } } - + if(Keys.IF_SUBSTANDARD.equals(vo.getStdMsgTypeCode())) { if (logger.isDebug()) logger.debug("RequestProcessor] Mapping StandardMessage from INPUT MESSAGE - SUBSTANDARD"); try { @@ -301,7 +302,7 @@ public class RequestProcessor extends RequestProcessorSupport { subMessage = versionMapper.parseSub(vo.getAdptrMsgType(), message); subMessage.setBizDataCharset(inboundCharset); standardMessage = versionMapper.mapFromSub(subMessage, standardMessage); - + // 변경된 값이 있을 수 있으므로 재처리. standardManager.getMessageCoordinator().coordinateAfterParsing(standardMessage, vo, prop); if(logger.isDebug() && standardMessage !=null) { @@ -350,9 +351,9 @@ public class RequestProcessor extends RequestProcessorSupport { String guid = mapper.getGuid(standardMessage); String guidSeq = mapper.getGuidSeq(standardMessage); String returnType = mapper.getSendRecvDivision(standardMessage); // S|R - + String receivedBizData = standardMessage.getBizData(); - + vo.setEaiSvcCd(eaiSvcCd); if (StringUtils.isBlank(eaiSvcCd)) { vo.setRspErrorCode("RECEAIIRP009"); @@ -383,7 +384,7 @@ public class RequestProcessor extends RequestProcessorSupport { return getInboundErrorResponse(prop, standardMessage, mapper, vo.getRspErrorCode(), vo.getRspErrorMsg(), inboundCharset); } } - + // 채널분류코드별로 GUID 중복체크 if (eaiServerManager.isMCI() && STDMessageKeys.SEND_RECV_CD_SEND.equals(mapper.getSendRecvDivision(standardMessage)) && PropManager.getInstance().isContainProperties("DUPLICATION_GUID") ) { @@ -414,7 +415,11 @@ public class RequestProcessor extends RequestProcessorSupport { } } prop.setProperty(TransactionContextKeys.GUID, guid); - + + // INBOUND MESSAGE 스레드 로컬에 저장 + String bizData = standardMessage.getBizData(); + ElinkTransactionContext.setRequestBizData(bizData); + // INBOUND_HEADER 가 NULL인 경우는 HTTP가 아닌것으로 간주함. if(prop.get(HttpClientAdapterServiceKey.INBOUND_HEADER) != null) { HttpAdapterExtraLogUtil.insertHttpAdapterExtraLog(vo.getUuid(), 100,