インターフェースの要求・応答ユーザープログラム
プログラムの用途 | 実装するJavaインターフェース | 適用する設定画面 |
---|---|---|
ユーザー呼び出しプログラム | BusinessProcess | Interface Management > Online Interface |
対外機関やチャネルから受信した要求/応答電文に対して、インターフェース別に特殊な処理が必要な場合に開発して適用する。
caution
インターフェースの特化ロジックは業務プログラムにインターフェース呼び出し時に処理することを推奨し、できるだけ使用しない。
開発方法
インターフェース要求ユーザープログラム
BusinessProcess APIは、入力と出として、れぞれBusinessProcessInとBusinessProcessOutを使用する。
入力と出力のモデルは、APIプロジェクトのbxi.api.model
に定義されており、それぞれの項目についての説明は、下記のとおりである。
BusinessProcessIn
設定項目 | フィールド名 | 説明 |
---|---|---|
システムID | sysId | 電文を送信した対内システムID、またはチャネル要求電文を処理するシステムIDを意味する。 |
機関コード | instCd | 電文を送信した機関コード、または対内システム電文を対外機関に送信する機関コードを意味する。FEPでのみ使用される項目である。 |
業務コード | bizCd | 機関や対内システムの業務コードを意味する。 |
コネクションID | cnntId | 電文を受信したコネクションの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
設定項目 | フィールド名 | 説明 |
---|---|---|
システムID | sysId | 電文を送信した対内システムID、またはチャネル応答電文を処理するシステムIDを意味する。 |
機関コード | instCd | 電文を送信した機関コード、または対内システム電文を対外機関に送信する機関コードを意味する。FEPでのみ使用される項目である。 |
業務コード | bizCd | 機関や対内システムの業務コードを意味する。 |
コネクションID | error | 電文を受信したコネクションの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;
}
};