표준전문생성프로그램
프로그램용도 | 구현할 Java인터페이스 | 적용할 설정화면 |
---|---|---|
사용자호출프로그램 | StandardCreateMessage | 기본설정관리>시스템별업무정보 |
내부에서 사용하는 표준전문을 생성하는 프로그램이다.
대외기관에서 입력되는 값의 매핑만으로 모든 값을 생성할 수 있는 경우 생략될 수 있으나, 대부분의 경우 기관의 입력되는 공통부외에 추가적인 필드 값을 설정하므로 일반적으로 개발되어 적용된다.
개발방법
요청을 위한 표준전문
대외기관이나 채널에서 수신된 요청 전문의 헤더가 대내시스템의 표준전문 헤더와 달라 새롭게 생성하는 케이스이다.
@Override
public Map<String, Object> request(BxiMessage bxiMessage, Map<String, Object> extHeader,
BxiOnlineIntrfcIO onlIntrfcInfo) {
Map<String, Object> stdHeader = new LinkedHashMap<>();
String guid = JavaUtil.createUid();
stdHeader.put("stdMsgLen", 344L);
stdHeader.put("stdMsgVer", 1L);
stdHeader.put("guid", guid);
stdHeader.put("guidSeq", 1L);
stdHeader.put("fstGuid", guid);
stdHeader.put("trtInstCd", "TST");
stdHeader.put("msgClssCd", "S");
bxiMessage.setStdHeader(stdHeader);
Map<String, String> userData = new LinkedHashMap<>();
userData.put("guid", (String) stdHeader.get("guid"));
userData.put("fstGuid", (String) stdHeader.get("fstGuid"));
bxiMessage.setUserData(userData);
// 전문정보 저장
XmlTypeInfo xmlInfo = LayoutUtil.makeXmlTypeInfo("bxi.extension.layout.EduSystemHeader--1", 1024);
bxiMessage.setStdHeaderMsgInfo(xmlInfo);
return stdHeader;
}
표준전문 헤더 생성에 필요한 정보는 bxiMessage
에 저장되어 있으므로 이것을 이용하여 표준전문 헤더를 Map
형식으로 생성한다.
이 때 생성하는 헤더는 전문레이아웃
에 등록되어있어야 하며,
해당 전문레이아웃의 ID를 표준전문 헤더 정보인 stdHeaderMsgInfo
에도 저장해야 한다.
사용자 데이터는 거래내역이나 온라인로그상세 화면에서 사용자 데이터로 검색하고자 하는 경우에 사용하는 데이터로,
userData
에 저장하면 해당 데이터를 거래내역이나 송수신 로그에 저장하여 UI에서 검색용도로 사용할 수 있다.
☑ 입력
- bxiMessage : 전문 처리에 필요한 정보가 저장되어 있는 항목
- extHeader : 대외기관이나 채널에서 수신한 헤더
- onlIntrfcInfo : 요청한 거래의 인터페이스 정보
☑ 출력
- Map 형식의 표준전문 헤더
응답을 위한 표준전문
대내시스템에서 대외기관이나 또는 단위시스템에 응답하는 경우에 사용한다. 요청 시 표준전문 헤더는 저장해 두었다가 응답을 받으면 저장해둔 헤더를 복원하는데, 해당 요청 헤더에서 필요한 필드만 변경한다.
응답에 대한 표준전문 헤더 처리는 요청 시 표준전문으로 요청한 경우에 사용한다.
@Override
public Map<String, Object> response(BxiMessage bxiMessage, Map<String, Object> stdHeader,
Map<String, Object> extHeader) {
// 1. Change request / response breakdown to response
stdHeader.put("msgClssCd", "R");
return stdHeader;
}
☑ 입력
- bxiMessage : 전문 처리에 필요한 정보가 저장되어 있는 항목
- stdHeader : 복원한 표준전문 헤더
- extHeader : 대외기관이나 채널에서 수신한 헤더
☑ 출력
- Map 형식의 표준전문 헤더
Dummy 응답을 위한 표준전문 헤더
대내시스템의 서비스가 대외기관에 비동기 방식으로 요청한 경우, BXI는 대외기관으로부터 실제 응답을 받기 전에 대내시스템에 미리 Dummy응답을 전송한다.
따라서 대내시스템은 대외기관으로부터 응답을 받기까지 대기하지 않고 요청 즉시 연결을 해제하며, 실제 대외기관의 응답을 받은 후 해당 응답을 재전송한다.
@Override
public void dummyResponse(BxiMessage bxiMessage, BxiIntrnlSysBizIO intrnlSysBizInfo) {
if (ObjectUtils.isEmpty(bxiMessage)) {
return;
}
Map<String, Object> stdHeader = bxiMessage.getStdHeader();
if (ObjectUtils.isEmpty(stdHeader)) {
return;
}
stdHeader.put("msgClssCd", "R");
stdHeader.put("rspnRsltClssCd", "9");
stdHeader.put("guidSeq", "0");
bxiMessage.setBody(null);
byte[] responseMessage = SendMessageCreator.makeSendMessageToInternal(
intrnlSysBizInfo.getChlMsgTypeCd(), intrnlSysBizInfo.getMsgCharSetCd(),
intrnlSysBizInfo.getExtrnlComInclYn(), bxiMessage, null, null);
bxiMessage.setMessage(responseMessage);
}
Dummy 응답은 개별부는 제외하고 헤더부만으로 생성하기 때문에 body
데이터는 Clear한다.
생성된 Dummy 응답은 전송을 위해 BxiMessage의 message
에 저장한다.
☑ 입력
- bxiMessage : 전문 처리에 필요한 정보가 저장되어 있는 항목
- intrnlSysBizInfo : 요청한 대내시스템의 시스템별업무정보
☑ 출력
- 없음
응답 전문 전송 오류에 따른 표준전문 헤더
대외기관에서 요청한 거래를 대내시스템에서 처리한 후 해당 응답을 다시 대외기관에 전송할 때 오류로 인해 응답 전송이 불가할 경우 사용한다. EX. 전송할 커넥션이 끊어짐
이 경우에 표준전문 헤더에 응답전문 전송 오류라는 플래그를 설정해서 전달한다.
@Override
public void sendErrorReply(BxiMessage bxiMessage) {
// 1. Check input data
if (ObjectUtil.isEmpty(bxiMessage)) {
return;
}
Map<String, Object> stdHeader = bxiMessage.getStdHeader();
if (ObjectUtil.isEmpty(stdHeader)) {
return;
}
// 2. Set the response-specific transmission error flag
stdHeader.put("sendFlag", "E");
// The common header and body are null. Because it only sends standard message.
bxiMessage.setComHeader(null);
bxiMessage.setBody(null);
// 3. Generate send message
byte[] responseMessage = SendMessageCreator.makeSendMessageToInternal(
intrnlSysBizInfo.getChlMsgTypeCd(), intrnlSysBizInfo.getMsgCharSetCd(),
intrnlSysBizInfo.getExtrnlComInclYn(), bxiMessage);
// 4. Store dummy response message
bxiMessage.setMessage(responseMessage);
}
응답에 대한 에러 반환도 Dummy응답과 동일하게 표준전문 헤더에 응답전문 전송 오류 플래그를 설정하고 전송 데이터를 생성한다.
☑ 입력
- bxiMessage : 전문 처리에 필요한 정보가 저장되어 있는 항목
☑ 출력
- 없음
전체 예제
package bxi.extension.sample;
import java.util.LinkedHashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import bxi.api.StandardCreateMessage;
import bxi.common.dao.dto.BxiIntrnlSysBizIO;
import bxi.common.dao.dto.BxiOnlineIntrfcIO;
import bxi.common.model.BxiMessage;
import bxi.common.model.XmlTypeInfo;
import bxi.common.utility.JavaUtil;
import bxi.online.common.SendMessageCreator;
import bxi.parser.base.LayoutUtil;
@Component
public class StandardCreateMessageImpl implements StandardCreateMessage {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public Map<String, Object> request(BxiMessage bxiMessage, Map<String, Object> extHeader,
BxiOnlineIntrfcIO onlIntrfcInfo) {
Map<String, Object> stdHeader = new LinkedHashMap<>();
String guid = JavaUtil.createUid();
stdHeader.put("stdMsgLen", 344L);
stdHeader.put("stdMsgVer", 1L);
stdHeader.put("guid", guid);
stdHeader.put("guidSeq", 1L);
stdHeader.put("fstGuid", guid);
stdHeader.put("trtInstCd", "TST");
stdHeader.put("msgClssCd", "S");
bxiMessage.setStdHeader(stdHeader);
Map<String, String> userData = new LinkedHashMap<>();
userData.put("guid", (String) stdHeader.get("guid"));
userData.put("fstGuid", (String) stdHeader.get("fstGuid"));
bxiMessage.setUserData(userData);
// 전문정보 저장
XmlTypeInfo xmlInfo = LayoutUtil.makeXmlTypeInfo("bxi.extension.layout.EduSystemHeader--1", 1024);
bxiMessage.setStdHeaderMsgInfo(xmlInfo);
return stdHeader;
}
@Override
public Map<String, Object> response(BxiMessage bxiMessage, Map<String, Object> stdHeader,
Map<String, Object> extHeader) {
stdHeader.put("msgClssCd", "R");
XmlTypeInfo xmlInfo = LayoutUtil.makeXmlTypeInfo("bxi.extension.layout.EduSystemHeader--1", 1024);
bxiMessage.setStdHeaderMsgInfo(xmlInfo);
return stdHeader;
}
@Override
public void dummyResponse(BxiMessage bxiMessage, BxiIntrnlSysBizIO intrnlSysBizInfo) {
if (ObjectUtils.isEmpty(bxiMessage)) {
return;
}
Map<String, Object> stdHeader = bxiMessage.getStdHeader();
if (ObjectUtils.isEmpty(stdHeader)) {
return;
}
stdHeader.put("msgClssCd", "R");
stdHeader.put("rspnRsltClssCd", "9");
stdHeader.put("guidSeq", "0");
bxiMessage.setBody(null);
byte[] responseMessage = SendMessageCreator.makeSendMessageToInternal(
intrnlSysBizInfo.getChlMsgTypeCd(), intrnlSysBizInfo.getMsgCharSetCd(),
intrnlSysBizInfo.getExtrnlComInclYn(), bxiMessage, null, null);
bxiMessage.setMessage(responseMessage);
}
@Override
public boolean sendErrorReply(BxiMessage bxiMessage) {
return false;
}
}