본문으로 건너뛰기
버전: 3.4.4

인터페이스 요청응답 사용자프로그램

프로그램용도구현할 Java인터페이스적용할 설정화면
사용자호출프로그램BusinessProcess인터페이스관리>온라인인터페이스

대외기관이나 채널에서 수신한 요청/응답전문에 대해, 인터페이스별로 특수한 처리가 필요한 경우 개발해 적용한다.

주의

인터페이스의 특화 로직은 업무프로그램에 인터페이스 호출시 처리하는 것으로 권장하고, 가급적 사용하지 않는다.

개발방법

인터페이스 요청 사용자 프로그램

BusinessProcess API는 입력과 출력을 각각 BusinessProcessIn과 BusinessProcessOut을 사용한다. 입력과 출력의 모델은 API 프로젝트의 bxi.api.model에 정의되어 있으며, 각각의 항목에 대한 설명은 아래와 같다.

BusinessProcessIn

설정항목필드명설명
시스템IDsysId전문을 전송한 대내시스템 ID이거나 또는 채널 요청 전문을 처리할 시스템 ID를 의미한다.
기관코드instCd전문을 전송한 기관코드이거나 또는 대내시스템 전문을 대외기관에 전송할 기관코드를 의미한다. FEP에서만 사용되는 항목이다.
업무코드bizCd기관이나 대내시스템의 업무코드를 의미한다.
커넥션IDcnntId전문을 수신한 커넥션의 ID를 의미한다.
헤더부 데이터header요청으로 수신한 전문 중 헤더부를 Unmarshal한 데이터를 의미한다.
메시지부 데이터errMessage요청에서는 사용 안함
개별부 데이터body요청으로 수신한 중 개별부 데이터를 의미한다. 개별부 데이터는 인터페이스 정보의 요청 레이아웃을 등록하여 Unmarshal이 되었으면 Map 형식이고, 그렇지 않으면 Plain text 데이터이다.

BusinessProcessOut

설정항목필드명설명
헤더부 데이터header입력으로 전달된 헤더부 데이터에 사용자가 변경하거나 추가한 헤더부 데이터를 의미한다. 만약, 요청 사용자 프로그램 처리중에 에러가 발생한 경우 채널에 에러 응답 전송을 위해 에러 정보를 설정할 수 도 있다.
메시지부 데이터errMessage요청 사용자 프로그램 처리중에 에러가 발생한 경우 채널에 에러 응답 메시지가 저장된 데이터이다. 정상 처리한 경우 null를 리턴한다. MCI, EAI에서만 사용되는 항목이며, FEP에서는 null로 응답한다.
개별부 데이터body입력으로 전달된 개별부 데이터에 사용자가 변경하거나 추가한 개별부 데이터를 의미한다.
에러 여부error요청 사용자 프로그램 처리 중에 에러가 발생했는지 여부를 의미한다. true로 응답하면 에러로 판단하여 에러 응답 전문을 채널에 전송한다. 처리 중에 에러가 발생한 경우 에러 응답할 메시지를 만들어서 리턴해 주어야 한다.

아래 예제는 대외기관에서 수신한 요청 전문에 대해 요청 사용자 프로그램에서 입력 항목을 검증하는 프로그램이다.

요청 전문 중에서 특정 항목의 값이 없으면 에러로 처리하고, 대외기관에서 수신한 전문이기 때문에 공통부에 에러 정보를 저장하여 대외기관에 응답한다.

@Component
public class RequestCustomProgram implements BusinessProcess {

@Override
public BusinessProcessOut process(BusinessProcessIn in) {
BusinessProcessOut out = new BusinessProcessOut();
out.setError(false);
out.setHeader(in.getHeader());
out.setBody(in.getBody());

if (header.get("intrfcId") == null) {
out.setError(true);
out.getHeader().put("rspsCd", "01");
}

return out;
}
};

아래 예제는 대내 채널에서 수신한 요청 전문에 대해 요청 사용자 프로그램에서 입력 항목을 검증하는 프로그램이다.

요청 전문 중에서 특정 항목의 값이 없으면 에러로 처리하고, 에러 발생 시 대내 채널에서 수신한 전문이기 때문에 에러 메시지를 만들어 응답한다.

@Component
public class RequestCustomProgram implements BusinessProcess {

@Override
public BusinessProcessOut process(BusinessProcessIn in) {
BusinessProcessOut out = new BusinessProcessOut();
out.setError(false);
out.setHeader(in.getHeader());
out.setBody(in.getBody());

if (header.get("intrfcId") == null) {
out.setError(true);
Map<String, Object> errMessage = in.getErrMessage();
if (errMessage == null)
errMessage = in.getErrMessage();
}
errMessage.set("errCode", "BXIE08431");
errMessage.set("errMsg", "Interface Id is null");
out.setErrMessage(errMessage);
}

return out;
}
};

인터페이스 응답 사용자 프로그램

BusinessProcess API는 입력과 출력을 각각 BusinessProcessIn과 BusinessProcessOut을 사용한다. 입력과 출력의 모델은 API 프로젝트의 bxi.api.model에 정의되어 있으며, 각각의 항목에 대한 설명은 아래와 같다.

BusinessProcessIn

설정항목필드명설명
시스템IDsysId전문을 전송한 대내시스템 ID이거나 또는 채널 응답 전문을 처리할 시스템 ID를 의미한다.
기관코드instCd전문을 전송한 기관코드이거나 또는 대내시스템 전문을 대외기관에 전송할 기관코드를 의미한다. FEP에서만 사용되는 항목이다.
업무코드bizCd기관이나 대내시스템의 업무코드를 의미한다.
커넥션IDerror전문을 수신한 커넥션의 ID를 의미한다.
헤더부 데이터header응답으로 수신한 전문 중 헤더부를 Unmarshal한 데이터를 의미한다.
메시지부 데이터errMessage응답으로 수신한 전문 중 메시지부를 Unmarshal한 데이터를 의미한다. MCI, EAI에서만 사용되는 항목이다.
개별부 데이터body응답으로 수신한 전문 중 개별부 데이터를 의미한다. 개별부 데이터는 인터페이스 정보에 레이아웃을 등록하여 Unmarshal이 되었으면 Map 형식이고, 그렇지 않으면 Plain text 데이터이다.

BusinessProcessOut

설정항목필드명설명
헤더부 데이터header입력으로 전달된 헤더부 데이터에 사용자가 변경하거나 추가한 헤더부 데이터를 의미한다.
메시지부 데이터errMessage응답 사용자 프로그램에서는 메시지부는 사용하지 않는다.
개별부 데이터body입력으로 전달된 개별부 데이터에 사용자가 변경하거나 추가한 개별부 데이터를 의미한다.
에러 여부error응답 사용자 프로그램 처리 중에 에러가 발생했는지 여부를 의미한다. true로 응답하면 에러로 판단하여 무응답 한다. 왜냐하면 대내시스템 서비스는 정상인데 대외기관에 에러로 응답하면 Sync가 맞지 않기 때문이다.

아래 예제는 응답 전문 중에서 특정 항목의 값을 저장하는 사용자프로그램이다.

@Component
public class ResponseCustomProgram implements BusinessProcess {

@Override
public BusinessProcessOut process(BusinessProcessIn in) {
BusinessProcessOut out = new BusinessProcessOut();
out.setError(false);
out.setHeader(in.getHeader());
out.setBody(in.getBody());

if (header.get("intrfcId").equals("EI-001-0101-01")) {
out.getBody().put("rspsCd", "88");
}

return out;
}
};