RESTエラー応答プログラム
プログラムの用途 | 実装するJavaインターフェース | 適用する設定画面 |
---|---|---|
ユーザー呼び出しプログラム | RestErrorResponseCreate | API Information Management > API Information |
受信システムの障害などで、要求電文を受信システムに送信できない場合、当該取引は無応答(Timeout)処理される。
もし、送信システムに、エラー応答電文を送信する必要がある場合、エラー応答プログラムでエラー電文を作成して、送信システムに応答を送信することができる。
開発方法
エラー応答プログラムの入出力モデル
RestErrorResponseCreate APIは、入力と出力として、それぞれRestErrorResponseCreateIn
とRestErrorResponseCreateOut
を使用する。入力と出力のモデルは、APIプロジェクトのbxi.api.model
に定義されており、それぞれの項目についての説明は、下記のとおりである。
RestErrorResponseCreateIn
設定項目 | フィールド名 | 説明 |
---|---|---|
機関コード | instCd | 電文を送信した機関コード、、または対内システム電文を対外機関に送信する機関コードを意味する。FEPでのみ使用される項目である。 |
業務コード | bizCd | 機関や対内システムの業務コードを意味する。 |
ドメインID | domainId | ドメインIDを意味する。 |
APIID | apiId | API IDを意味する。 |
HTTPメソッド | httpMethod | HTTPメソッド(GET、POST..)を意味する。 |
URL | url | 転送するURLを意味する。 |
HTTPヘッダー | httpHeader | HTTPヘッダー値をMap形式で保存する。 |
個別部データ | body | 各取引別の個別電文を意味する。 |
要求・応答区分 | rqstRspsDscd | 要求・応答区分コードを意味する。 |
HTTP応答コード | httpRspsCd | HTTPレ応答コードを意味する。 |
応答スコード | rspsCd | 応答コードを意味する。 |
タイムアウトするかどうか | timeout | タイムアウトエラーであるかどうかを意味する。タイムアウトエラーの場合、trueである。 |
同期するかどうか | sync | 同期するかどうかを意味する。同期の場合、trueである。 |
伝送エラー | sendError | 電文伝送エラーであるかどうかを意味する。電文伝送エラーの場合、trueである。 |
例外 | exception | 取引に失敗した例外を意味する。 |
RestErrorResponseCreateOut
設定項目 | フィールド名 | 説明 |
---|---|---|
HTTPヘッダー | httpHeader | HTTPヘッダー値をMap形式で保存する。 |
個別部データ | body | エラー応答する個別部データを意味する。応答する個別部データがない場合、nullと応答する。 |
HTTP状態コード | statusCode | HTTPレ応答コードを意味する。セットされた値で応答コードが表示される。 |
エラーであるかどうか | error | エラー応答電文作成中にエラーが発生したかどうかを意味する。trueと応答すると、エラー応答電文を送信しない。 |
下記の例は、送信システムで受信した電文を処理するプロセスでエラーが発生してRESTエラー応答する例である。
1.出力オブジェクト作成および初期化
@Override
public RestErrorResponseCreateOut errorProcess(RestErrorResponseCreateIn in) {
RestErrorResponseCreateOut out = new RestErrorResponseCreateOut();
}
エラー応答電文を作成して伝送する出力オブジェクトを作成する。
2.エラーコードを保存
// Generate error response message
Map<String, Object> body = new LinkedHashMap<String, Object>();
body.put("rgstrnNbr", "aaa");
body.put("rgstrnNbrDscd", "b");
body.put("dataUsePspr", "cc");
body.put("inqryAgrmntYn", "N");
body.put("entrprsName", "bankware");
body.put("custName", "name");
body.put("ocptnCd", "11");
body.put("cardRank", in.getRspsCd());
out.setStatusCode(500); // 500エラーを投げるという例である
out.setHttpHeader(in.getHttpHeader());
out.setBody(ConversionUtil.objectToJson(body));
out.setError(false);
入力で伝達したHTTPヘッダーを出力のHTTPヘッダーに保存し、エラー時に見せる個別部データを作成して出力のbody
に保存する。
当該ロジックが正常に実行された場合、出力のerror
にfalseを保存する。(エラー応答作成中にエラーが発生した場合には、trueが保存されるようにロジックを構成する。)
全体例
package bxi.extension.customizing.api;
import java.util.LinkedHashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import bxi.api.RestErrorResponseCreate;
import bxi.api.model.RestErrorResponseCreateIn;
import bxi.api.model.RestErrorResponseCreateOut;
import bxi.parser.conversion.ConversionUtil;
@Component
public class RestErrorResponseProgram implements RestErrorResponseCreate {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public RestErrorResponseCreateOut errorProcess(RestErrorResponseCreateIn in) {
logger.debug("User Request Program Start. in : [{}]", in);
RestErrorResponseCreateOut out = new RestErrorResponseCreateOut();
Map<String, Object> body = new LinkedHashMap<String, Object>();
body.put("rgstrnNbr", "aaa");
body.put("rgstrnNbrDscd", "b");
body.put("dataUsePspr", "cc");
body.put("inqryAgrmntYn", "N");
body.put("entrprsName", "bankware");
body.put("custName", "name");
body.put("ocptnCd", "11");
body.put("cardRank", in.getRspsCd());
out.setStatusCode(500);
out.setHttpHeader(in.getHttpHeader());
out.setBody(ConversionUtil.objectToJson(body));
out.setError(false);
return out;
}
}