본문으로 건너뛰기

요청응답구분프로그램

프로그램용도구현할 Java인터페이스적용할 설정화면
사용자호출프로그램RequestAndResponseDistinction기본설정관리>기관별업무정보, 기본설정관리>시스템별업무정보

공통부 전문의 요청/응답을 구분하는 방법은 매우 다양하다.

기관의 경우 전문종별/업무코드의 조합으로 판단되기도 하고, 전문의 특정필드 또는 송수신 커넥션을 구분하여 처리하기도 한다. 따라서 요청응답구분 프로그램은 각 기관/시스템별로 프로그램을 개발하여 적용해야 하는 필수 프로그램이다.

개발방법

Map방식으로 변환한 후 호출하는 API

해당 예제는 Map에서 종별코드 msgClssCd 필드의 값을 조회하여 S면 요청이고 아니면 응답으로 판단한다.

@Override
public RequestResponseKindEnum distinction(BxiMessage bxiMessage, Map<String, Object> header) {
// 1) Field lookup in Map
String msgType = (String) header.get("msgClssCd");
logger.debug("msgType : {}", msgType);

// 2) If the third field of the field is 0, it is request specific.
return ("S".equals(msgType)) ? RequestResponseKindEnum.REQUEST
: RequestResponseKindEnum.RESPONSE;
}

☑ 입력

  • bxiMessage : 전문 처리에 필요한 정보가 저장되어 있는 항목
  • header : 헤더부를 Unmarshal한 Map 형식의 헤더부 데이터

☑ 출력

  • RequestResponseKindEnum 값으로 요청은 REQUEST, 응답은 RESPONSE 반환

수신받은 전문 데이터로 호출하는 API

해당 예제는 unmarshal되지 않은 전체 메시지로 요청응답을 구분한다. 대외에서 수신한 전문에서 종별코드 위치의 값을 조회하고, S면 요청, 아니면 응답으로 판단한다.

@Override
public RequestResponseKindEnum distinction(BxiMessage bxiMessage, String message) {
// 1) Separate data from field positions in the text
String msgType = message.substring(18, 22);
logger.debug("msgType : {}", msgType);

// 2) If the third field of the field is 0, it is request specific.
return ("0".equals(msgType)) ? RequestResponseKindEnum.REQUEST
: RequestResponseKindEnum.RESPONSE;
}

☑ 입력

  • bxiMessage : 해당 전문 처리에 필요한 정보가 저장되어 있는 항목
  • message : 수신한 전문 데이터

☑ 출력

  • RequestResponseKindEnum 값으로 요청은 REQUEST, 응답은 RESPONSE 반환

전체 예제

package bxi.extension.sample;

import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import bxi.api.RequestAndResponseDistinction;
import bxi.common.enums.RequestResponseKindEnum;
import bxi.common.model.BxiMessage;

@Component
public class RequestAndResponseDistinctionImpl implements RequestAndResponseDistinction {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Override
public RequestResponseKindEnum distinction(BxiMessage bxiMessage, Map<String, Object> header) {
String msgType = (String) header.get("msgClssCd");
logger.debug("msgType : {}", msgType);

return getRequestResponseType(msgType);
}

@Override
public RequestResponseKindEnum distinction(BxiMessage bxiMessage, String message) {
String msgType = message.substring(18, 22);
logger.debug("msgType : {}", msgType);

return getRequestResponseType(msgType);
}

private RequestResponseKindEnum getRequestResponseType(String msgType) {
if ("S".equals(msgType)) {
return RequestResponseKindEnum.REQUEST;
}

return RequestResponseKindEnum.RESPONSE;
}
}