ServiceEndpoint 처리흐름 커스터마이징
BX Framework 3.0에서는 Framework에서 제공하는 ServiceEndpoint처리흐름이외에 RequestInterceptor 인터페이스를 이용하여 사용자의 처리로직을 처리흐름에 추가할 수 있다. default extension에서 RequestInterceptor로 DefaultRequestInterceptor을 사용하고 있다.
1. ServiceEndpoint RequestInterceptor
ServiceEndpoint RequestInterceptor는 bxm.request.RequestInterceptor 인터페이스를 구현하고 bxm-management-instance.xml의 interceptor-classname으로 지정한다. RequestInterceptor 인터페이스는 사용자의 처리로직을 ServiceEndpoint에 추가할 수 있는 API를 정의하고 있다.
-
Service Endpoint 의 bxm-management-instance.xml
…
<bxm-instance name="bxm-instance">
...
<context>
...
<request header-classname="bxm.dft.context.DefaultSystemHeader" imagelogging="true"
interceptor-classname="bxm.dft.service.endpoint.DefaultRequestInterceptor"
...
-
bxm.request.RequestInterceptor
…
boolean afterResolvingRequest(ResponseResolver responseResolver, OutputStream outStream,
EndpointMessageType messageType, String encoding, ResolvedRequest request)
throws Throwable;
void preProcess( ResolvedRequest request) throws Exception;
void postProcess( ResolvedRequest request, ResolvedResponse response) throws Exception;
void beforeResolvingResponse(ResolvedRequest request, ResolvedResponse response, Throwable th, DataSource datasource) throws Exception;
void setResponseHeaderData(ResolvedResponse response);
void afterCompletion( ResolvedRequest request, ResolvedResponse response, Throwable th) throws Exception;
1.1. afterResolvingRequest
입력전문 변환작업이 끝난 후 수행할 작업을 구현한다. 헬스체크전문에 대한 응답처리와 같이 전문해석후 곧바로 응답데이터를 보내는 경우 사용할 수 있다.
입력/출력구분 | 파라미터 | 설명 |
---|---|---|
입력파라미터 |
ResponseResolver responseResolver |
응답객체를 응답전문으로 변환하는 response resolver객체 |
OutputStream outStream |
응답전문을 출력할 OutputStream |
|
EndpointMessageType messageType |
ServiceEndpoint에서 인지한 전문의 유형 |
|
String encoding |
응답전문의 인코딩 |
|
ResolvedRequest request |
입력전문을 변환한 시스템헤더객체, 업무서비스입력객체를 포함하고 있는 ResolvedRequest객체 |
|
반환값 |
boolean |
true : 이후 ServiceEndpoint처리를 계속 수행 |
1.2. preProcess
업무서비스를 호출하기전 먼저 처리할 작업을 구현한다. 시스템헤더의 기본값을 설정하거나 Framework에서 사용하는 DataContainer를 초기화 하는 작업을 할 수 있다.
입력/출력구분 | 파라미터 | 설명 |
---|---|---|
입력파라미터 |
ResolvedRequest request |
입력전문을 변환한 시스템헤더객체, 업무서비스입력객체를 포함하고 있는 ResolvedRequest객체 |
반환값 |
void |
1.3. postProcess
업무서비스를 호출한 후 처리할 작업을 구현한다.
입력/출력구분 | 파라미터 | 설명 |
---|---|---|
입력파라미터 |
ResolvedRequest request |
입력전문을 변환한 시스템헤더객체, 업무서비스입력객체를 포함하고 있는 ResolvedRequest객체 |
ResolvedResponse response |
응답전문으로 변환할 시스템헤더객체, 업무서비스응답객체를 포함하고 있는 ResolvedResponse객체 |
|
반환값 |
void |
1.4. beforeResolvingResponse
응답전문 변환작업전에 수행할 작업을 구현한다. 주로 응답이 에러 또는 정상인지에 따라 수행할 작업을 구현한다.
입력/출력구분 | 파라미터 | 설명 |
---|---|---|
입력파라미터 |
ResolvedRequest request |
입력전문을 변환한 시스템헤더객체, 업무서비스입력객체를 포함하고 있는 ResolvedRequest객체 |
ResolvedResponse response |
응답전문으로 변환할 시스템헤더객체, 업무서비스응답객체를 포함하고 있는 ResolvedResponse객체 |
|
Throwable th |
서비스수행중 에러가 발생했다면 원인Exception을 전달받는다. 정상상황일 때는 값이 null이다. |
|
DataSource datasource |
Framework 환경화일에 등록된 Framework Datasource객체 |
|
반환값 |
void |
1.5. setResponseHeaderData
응답전문으로 전송할 응답시스템헤더의 항목값을 설정한다.
입력/출력구분 | 파라미터 | 설명 |
---|---|---|
입력파라미터 |
ResolvedResponse response |
응답전문으로 변환할 시스템헤더객체, 업무서비스응답객체를 포함하고 있는 ResolvedResponse객체 |
반환값 |
void |
1.6. afterCompletion
응답전문이 Client로 전송된 후 수행할 작업을 구현한다.
입력/출력구분 | 파라미터 | 설명 |
---|---|---|
입력파라미터 |
ResolvedRequest request |
입력전문을 변환한 시스템헤더객체, 업무서비스입력객체를 포함하고 있는 ResolvedRequest객체 |
ResolvedResponse response |
응답전문으로 변환할 시스템헤더객체, 업무서비스응답객체를 포함하고 있는 ResolvedResponse객체 |
|
Throwable th |
서비스수행중 에러가 발생했다면 원인Exception을 전달받는다. 정상상황일 때는 값이 null이다. |
|
반환값 |
void |