From 3329291b178469f7c5b108fa440b88ee6c9f6442 Mon Sep 17 00:00:00 2001 From: jaewohong Date: Fri, 5 Dec 2025 14:18:56 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=EC=9B=90=EA=B2=A9=20=EB=B8=8C=EB=9E=9C?= =?UTF-8?q?=EC=B9=98=EC=97=90=EC=84=9C=20online-common=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=ED=8C=8C=EC=9D=BC=20=EA=B0=80=EC=A0=B8=EC=98=A4?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...HttpClientAccessTokenServiceWithParam.java | 11 ++- .../logger/HttpAdapterExtraHeaderVo.java | 6 +- .../common/logger/HttpAdapterExtraLogVo.java | 1 + .../async/HttpAdapterExtraLogH2Factory.java | 4 +- .../mapper/HttpAdapterExtraHeaderMapper.java | 44 +++++----- .../mapper/HttpAdapterExtraLogMapper.java | 80 ++++++++++++++----- .../common/util/HttpAdapterExtraLogUtil.java | 2 +- 7 files changed, 99 insertions(+), 49 deletions(-) diff --git a/src/main/java/com/eactive/eai/authoutbound/client/impl/HttpClientAccessTokenServiceWithParam.java b/src/main/java/com/eactive/eai/authoutbound/client/impl/HttpClientAccessTokenServiceWithParam.java index 3772406..45e7c60 100644 --- a/src/main/java/com/eactive/eai/authoutbound/client/impl/HttpClientAccessTokenServiceWithParam.java +++ b/src/main/java/com/eactive/eai/authoutbound/client/impl/HttpClientAccessTokenServiceWithParam.java @@ -51,7 +51,7 @@ import com.openbanking.eai.common.token.AccessTokenVO; import com.openbanking.eai.common.token.OAuth2AccessTokenVO; import org.springframework.security.web.util.UrlUtils; -/** +/** * 1. 기능 : HTTP 웹 컴포넌트를 POST 방식으로 호출할 수 있는 기능을 제공한다. 2. 처리 개요 : * - 2009.11.24 * retry 로직 제거 : 요청 3. 주의사항 * @@ -224,17 +224,20 @@ public class HttpClientAccessTokenServiceWithParam implements HttpClientAccessTo logger.debug("contentType = [" + contentType + "]"); logger.debug("encode = [" + encode + "]"); + OAuth2AccessTokenVO accessToken = new OAuth2AccessTokenVO(); try (CloseableHttpResponse response = httpClient.execute(httpPost)) { if (response.getCode() != 200) { + System.out.println("OAuth token receive status fail value= "+ response.getCode()); throw new Exception("OAuth token receive status fail value= " + response.getCode()); } + System.out.println("OAuth token receive status SUCCESS value= "+ response.getCode()); HttpEntity entity = response.getEntity(); String responseString = EntityUtils.toString(entity, encode); logger.debug("oauthToken RECV = [" + responseString + "]"); if (StringUtils.isNotBlank(responseString)) { - OAuth2AccessTokenVO accessToken = new OAuth2AccessTokenVO(); + //OAuth2AccessTokenVO accessToken = new OAuth2AccessTokenVO(); ObjectMapper objectMapper = new ObjectMapper(); JsonNode responseJSON = objectMapper.readTree(responseString); @@ -259,6 +262,10 @@ public class HttpClientAccessTokenServiceWithParam implements HttpClientAccessTo } else { throw new Exception("oauth token return null"); } + } catch (Exception e) { + e.printStackTrace(); + logger.error("[HttpClientAccessTokenServiceWithParam] retrieve accessToken exception :" + e.getMessage()); + return accessToken; } } } diff --git a/src/main/java/com/eactive/eai/common/logger/HttpAdapterExtraHeaderVo.java b/src/main/java/com/eactive/eai/common/logger/HttpAdapterExtraHeaderVo.java index 975f134..cce3a62 100644 --- a/src/main/java/com/eactive/eai/common/logger/HttpAdapterExtraHeaderVo.java +++ b/src/main/java/com/eactive/eai/common/logger/HttpAdapterExtraHeaderVo.java @@ -2,11 +2,15 @@ package com.eactive.eai.common.logger; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; @Data @AllArgsConstructor public class HttpAdapterExtraHeaderVo { private String name; - private String value; + + public HttpAdapterExtraHeaderVo() { + + } } diff --git a/src/main/java/com/eactive/eai/common/logger/HttpAdapterExtraLogVo.java b/src/main/java/com/eactive/eai/common/logger/HttpAdapterExtraLogVo.java index 4dcb0ac..318c57c 100644 --- a/src/main/java/com/eactive/eai/common/logger/HttpAdapterExtraLogVo.java +++ b/src/main/java/com/eactive/eai/common/logger/HttpAdapterExtraLogVo.java @@ -8,6 +8,7 @@ import java.util.List; public class HttpAdapterExtraLogVo { private String guid; private int serviceProcessNumber; + private String prcsDate; private String adapterGroupName; private String adapterName; private String url; diff --git a/src/main/java/com/eactive/eai/common/logger/async/HttpAdapterExtraLogH2Factory.java b/src/main/java/com/eactive/eai/common/logger/async/HttpAdapterExtraLogH2Factory.java index 7eb5292..93d9150 100644 --- a/src/main/java/com/eactive/eai/common/logger/async/HttpAdapterExtraLogH2Factory.java +++ b/src/main/java/com/eactive/eai/common/logger/async/HttpAdapterExtraLogH2Factory.java @@ -3,7 +3,7 @@ package com.eactive.eai.common.logger.async; import com.eactive.eai.common.property.PropManager; import com.eactive.eai.common.server.EAIServerManager; import com.eactive.eai.common.util.LogKeys; -import com.eactive.eai.data.entity.onl.logger.HttpAdapterExtraHeader; +//import com.eactive.eai.data.entity.onl.logger.HttpAdapterExtraHeader; import com.eactive.eai.data.entity.onl.logger.HttpAdapterExtraLog; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; @@ -66,7 +66,7 @@ public class HttpAdapterExtraLogH2Factory { // 엔티티 클래스 추가 configuration.addAnnotatedClass(HttpAdapterExtraLog.class); - configuration.addAnnotatedClass(HttpAdapterExtraHeader.class); +// configuration.addAnnotatedClass(HttpAdapterExtraHeader.class); return configuration.buildSessionFactory(); } catch (Throwable ex) { diff --git a/src/main/java/com/eactive/eai/common/logger/mapper/HttpAdapterExtraHeaderMapper.java b/src/main/java/com/eactive/eai/common/logger/mapper/HttpAdapterExtraHeaderMapper.java index e6eabe0..b609dee 100644 --- a/src/main/java/com/eactive/eai/common/logger/mapper/HttpAdapterExtraHeaderMapper.java +++ b/src/main/java/com/eactive/eai/common/logger/mapper/HttpAdapterExtraHeaderMapper.java @@ -1,22 +1,22 @@ -package com.eactive.eai.common.logger.mapper; - -import com.eactive.eai.common.logger.HttpAdapterExtraHeaderVo; -import com.eactive.eai.data.entity.onl.logger.HttpAdapterExtraHeader; -import com.eactive.eai.data.mapper.BaseMapperConfig; -import com.eactive.eai.data.mapper.GenericMapper; - -import org.mapstruct.InheritInverseConfiguration; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; - -@Mapper(config = BaseMapperConfig.class) -public interface HttpAdapterExtraHeaderMapper extends GenericMapper { - - @Override - @Mapping(source = "id.name", target = "name") - HttpAdapterExtraHeaderVo toVo(HttpAdapterExtraHeader entity); - - @Override - @InheritInverseConfiguration - HttpAdapterExtraHeader toEntity(HttpAdapterExtraHeaderVo vo); -} +//package com.eactive.eai.common.logger.mapper; +// +//import com.eactive.eai.common.logger.HttpAdapterExtraHeaderVo; +//import com.eactive.eai.data.entity.onl.logger.HttpAdapterExtraHeader; +//import com.eactive.eai.data.mapper.BaseMapperConfig; +//import com.eactive.eai.data.mapper.GenericMapper; +// +//import org.mapstruct.InheritInverseConfiguration; +//import org.mapstruct.Mapper; +//import org.mapstruct.Mapping; +// +//@Mapper(config = BaseMapperConfig.class) +//public interface HttpAdapterExtraHeaderMapper extends GenericMapper { +// +// @Override +// @Mapping(source = "id.name", target = "name") +// HttpAdapterExtraHeaderVo toVo(HttpAdapterExtraHeader entity); +// +// @Override +// @InheritInverseConfiguration +// HttpAdapterExtraHeader toEntity(HttpAdapterExtraHeaderVo vo); +//} diff --git a/src/main/java/com/eactive/eai/common/logger/mapper/HttpAdapterExtraLogMapper.java b/src/main/java/com/eactive/eai/common/logger/mapper/HttpAdapterExtraLogMapper.java index 73ba243..002e401 100644 --- a/src/main/java/com/eactive/eai/common/logger/mapper/HttpAdapterExtraLogMapper.java +++ b/src/main/java/com/eactive/eai/common/logger/mapper/HttpAdapterExtraLogMapper.java @@ -1,42 +1,80 @@ package com.eactive.eai.common.logger.mapper; +import com.eactive.eai.common.logger.HttpAdapterExtraHeaderVo; import com.eactive.eai.common.logger.HttpAdapterExtraLogVo; -import com.eactive.eai.data.entity.onl.logger.HttpAdapterExtraHeaderId; import com.eactive.eai.data.entity.onl.logger.HttpAdapterExtraLog; import com.eactive.eai.data.mapper.BaseMapperConfig; import com.eactive.eai.data.mapper.GenericMapper; - +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; import org.mapstruct.*; -import java.time.DayOfWeek; import java.time.LocalDate; -import java.util.Optional; +import java.time.format.DateTimeFormatter; +import java.util.Collections; +import java.util.List; -@Mapper(config = BaseMapperConfig.class, uses = HttpAdapterExtraHeaderMapper.class) -public interface HttpAdapterExtraLogMapper extends GenericMapper { +@Slf4j +@Mapper(config = BaseMapperConfig.class) +public abstract class HttpAdapterExtraLogMapper implements GenericMapper { + + private final static ObjectMapper objectMapper = new ObjectMapper(); + private static final DateTimeFormatter SDF_YYYYMMDD = DateTimeFormatter.ofPattern( "yyyyMMdd"); @Override @Mapping(source = "id.guid", target = "guid") @Mapping(source = "id.serviceProcessNumber", target = "serviceProcessNumber") - HttpAdapterExtraLogVo toVo(HttpAdapterExtraLog entity); + abstract public HttpAdapterExtraLogVo toVo(HttpAdapterExtraLog entity); @Override @InheritInverseConfiguration - HttpAdapterExtraLog toEntity(HttpAdapterExtraLogVo vo); + abstract public HttpAdapterExtraLog toEntity(HttpAdapterExtraLogVo vo); @AfterMapping - default void setHeaderIdAndWeekday(@MappingTarget HttpAdapterExtraLog entity, HttpAdapterExtraLogVo vo) { - DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek(); // 현재 요일 - int dayOfWeekNumber = dayOfWeek.getValue() % 7 + 1; // 1 (일요일)부터 7 (토요일)까지 - entity.getId().setWeekday(dayOfWeekNumber); - Optional.ofNullable(entity.getHeaderList()) - .ifPresent(headers -> headers.forEach(header -> { - if (header.getId() == null) { - header.setId(new HttpAdapterExtraHeaderId()); - } - header.getId().setWeekday(dayOfWeekNumber); - header.getId().setGuid(vo.getGuid()); - header.getId().setServiceProcessNumber(vo.getServiceProcessNumber()); - })); + public void voToEntity(@MappingTarget HttpAdapterExtraLog entity, HttpAdapterExtraLogVo vo) { + + // 1. Set weekday for partition table +// DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek(); // 현재 요일 +// int dayOfWeekNumber = dayOfWeek.getValue() % 7 + 1; // 1 (일요일)부터 7 (토요일)까지 +// entity.getId().setWeekday(dayOfWeekNumber); + +// String prcs_date = SDF_YYYYMMDD.format(ZonedDateTime.now()); + String prcs_date = LocalDate.now().format(SDF_YYYYMMDD); + entity.getId().setPrcsDate(prcs_date); + + // 2. Set Content + try { + String headerContent = objectMapper.writeValueAsString(vo.getHeaderList()); + entity.setHeaderContent(headerContent); + } catch (JsonProcessingException e) { + log.warn("Http Header Json Parse 실패", e); + entity.setHeaderContent("[{ \"error\": \"parse error\"}]"); + } + + } + + /** + * Entity → VO 변환 후 추가 처리 + */ + @AfterMapping + protected void entityToVo(@MappingTarget HttpAdapterExtraLogVo vo, HttpAdapterExtraLog entity) { + String headerContent = entity.getHeaderContent(); + if (headerContent == null || headerContent.isEmpty()) { + vo.setHeaderList(Collections.emptyList()); + return; + } + + try { + List headerList = objectMapper.readValue( + headerContent, + new TypeReference>() {} + ); + vo.setHeaderList(headerList); + } catch (JsonProcessingException e) { + log.warn("Http Header 역직렬화 실패", e); + vo.setHeaderList(Collections.emptyList()); + } } } diff --git a/src/main/java/com/eactive/eai/common/util/HttpAdapterExtraLogUtil.java b/src/main/java/com/eactive/eai/common/util/HttpAdapterExtraLogUtil.java index 8251e53..75f405c 100644 --- a/src/main/java/com/eactive/eai/common/util/HttpAdapterExtraLogUtil.java +++ b/src/main/java/com/eactive/eai/common/util/HttpAdapterExtraLogUtil.java @@ -101,7 +101,7 @@ public class HttpAdapterExtraLogUtil { public static List convertHeaderToListOfHttpAdapterExtraHeaderVo(Header[] headers) { Set seenNames = new HashSet<>(); return Arrays.stream(headers) - .filter(header -> seenNames.add(header.getName())) // 중복된 이름을 스킵 +// .filter(header -> seenNames.add(header.getName())) // 중복된 이름을 스킵 .map(header -> new HttpAdapterExtraHeaderVo(header.getName(), header.getValue())) .collect(Collectors.toList()); } From e4d59f3d3681ccd0b143a3ab1538a1c984d1a75f Mon Sep 17 00:00:00 2001 From: jaewohong Date: Fri, 5 Dec 2025 14:52:41 +0900 Subject: [PATCH 2/2] push for source sync --- .../adapter/http/client/impl/HttpClient5AdapterServiceRest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/eactive/eai/adapter/http/client/impl/HttpClient5AdapterServiceRest.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/HttpClient5AdapterServiceRest.java index b033323..fd923cd 100644 --- a/src/main/java/com/eactive/eai/adapter/http/client/impl/HttpClient5AdapterServiceRest.java +++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/HttpClient5AdapterServiceRest.java @@ -934,7 +934,7 @@ public class HttpClient5AdapterServiceRest extends HttpClient5AdapterServiceSupp clientSecret = niceAuth; } - // 여기서 SECRETY인지 nice-auth 인지 check 하여 clientSecret 값을 정하는 logic 추가하여 넘겨야한다. + // 여기서 SECRETY인지 nice-auth 인지 check 하여 clientSecret 값을 정하는 logic 추가하여 넘겨야한다. String responseMessage = doOutboundPreEncrypt(eaiBody, encryptAlgorithm, clientSecret, encryptAES256Iv, encryptAES256Key, certPath); logger.debug("outbound pre encrypte value is :"+responseMessage);