원격 브랜치에서 online-common 관련 파일 가져오기

This commit is contained in:
jaewohong
2025-12-05 14:18:56 +09:00
parent d04531886a
commit 3329291b17
7 changed files with 99 additions and 49 deletions
@@ -51,7 +51,7 @@ import com.openbanking.eai.common.token.AccessTokenVO;
import com.openbanking.eai.common.token.OAuth2AccessTokenVO; import com.openbanking.eai.common.token.OAuth2AccessTokenVO;
import org.springframework.security.web.util.UrlUtils; import org.springframework.security.web.util.UrlUtils;
/** /**
* 1. 기능 : HTTP 웹 컴포넌트를 POST 방식으로 호출할 수 있는 기능을 제공한다. 2. 처리 개요 : * - 2009.11.24 * 1. 기능 : HTTP 웹 컴포넌트를 POST 방식으로 호출할 수 있는 기능을 제공한다. 2. 처리 개요 : * - 2009.11.24
* retry 로직 제거 : 요청 3. 주의사항 * retry 로직 제거 : 요청 3. 주의사항
* *
@@ -224,17 +224,20 @@ public class HttpClientAccessTokenServiceWithParam implements HttpClientAccessTo
logger.debug("contentType = [" + contentType + "]"); logger.debug("contentType = [" + contentType + "]");
logger.debug("encode = [" + encode + "]"); logger.debug("encode = [" + encode + "]");
OAuth2AccessTokenVO accessToken = new OAuth2AccessTokenVO();
try (CloseableHttpResponse response = httpClient.execute(httpPost)) { try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
if (response.getCode() != 200) { 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()); 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(); HttpEntity entity = response.getEntity();
String responseString = EntityUtils.toString(entity, encode); String responseString = EntityUtils.toString(entity, encode);
logger.debug("oauthToken RECV = [" + responseString + "]"); logger.debug("oauthToken RECV = [" + responseString + "]");
if (StringUtils.isNotBlank(responseString)) { if (StringUtils.isNotBlank(responseString)) {
OAuth2AccessTokenVO accessToken = new OAuth2AccessTokenVO(); //OAuth2AccessTokenVO accessToken = new OAuth2AccessTokenVO();
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
JsonNode responseJSON = objectMapper.readTree(responseString); JsonNode responseJSON = objectMapper.readTree(responseString);
@@ -259,6 +262,10 @@ public class HttpClientAccessTokenServiceWithParam implements HttpClientAccessTo
} else { } else {
throw new Exception("oauth token return null"); throw new Exception("oauth token return null");
} }
} catch (Exception e) {
e.printStackTrace();
logger.error("[HttpClientAccessTokenServiceWithParam] retrieve accessToken exception :" + e.getMessage());
return accessToken;
} }
} }
} }
@@ -2,11 +2,15 @@ package com.eactive.eai.common.logger;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
public class HttpAdapterExtraHeaderVo { public class HttpAdapterExtraHeaderVo {
private String name; private String name;
private String value; private String value;
public HttpAdapterExtraHeaderVo() {
}
} }
@@ -8,6 +8,7 @@ import java.util.List;
public class HttpAdapterExtraLogVo { public class HttpAdapterExtraLogVo {
private String guid; private String guid;
private int serviceProcessNumber; private int serviceProcessNumber;
private String prcsDate;
private String adapterGroupName; private String adapterGroupName;
private String adapterName; private String adapterName;
private String url; private String url;
@@ -3,7 +3,7 @@ package com.eactive.eai.common.logger.async;
import com.eactive.eai.common.property.PropManager; import com.eactive.eai.common.property.PropManager;
import com.eactive.eai.common.server.EAIServerManager; import com.eactive.eai.common.server.EAIServerManager;
import com.eactive.eai.common.util.LogKeys; 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.eactive.eai.data.entity.onl.logger.HttpAdapterExtraLog;
import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource; import com.zaxxer.hikari.HikariDataSource;
@@ -66,7 +66,7 @@ public class HttpAdapterExtraLogH2Factory {
// 엔티티 클래스 추가 // 엔티티 클래스 추가
configuration.addAnnotatedClass(HttpAdapterExtraLog.class); configuration.addAnnotatedClass(HttpAdapterExtraLog.class);
configuration.addAnnotatedClass(HttpAdapterExtraHeader.class); // configuration.addAnnotatedClass(HttpAdapterExtraHeader.class);
return configuration.buildSessionFactory(); return configuration.buildSessionFactory();
} catch (Throwable ex) { } catch (Throwable ex) {
@@ -1,22 +1,22 @@
package com.eactive.eai.common.logger.mapper; //package com.eactive.eai.common.logger.mapper;
//
import com.eactive.eai.common.logger.HttpAdapterExtraHeaderVo; //import com.eactive.eai.common.logger.HttpAdapterExtraHeaderVo;
import com.eactive.eai.data.entity.onl.logger.HttpAdapterExtraHeader; //import com.eactive.eai.data.entity.onl.logger.HttpAdapterExtraHeader;
import com.eactive.eai.data.mapper.BaseMapperConfig; //import com.eactive.eai.data.mapper.BaseMapperConfig;
import com.eactive.eai.data.mapper.GenericMapper; //import com.eactive.eai.data.mapper.GenericMapper;
//
import org.mapstruct.InheritInverseConfiguration; //import org.mapstruct.InheritInverseConfiguration;
import org.mapstruct.Mapper; //import org.mapstruct.Mapper;
import org.mapstruct.Mapping; //import org.mapstruct.Mapping;
//
@Mapper(config = BaseMapperConfig.class) //@Mapper(config = BaseMapperConfig.class)
public interface HttpAdapterExtraHeaderMapper extends GenericMapper<HttpAdapterExtraHeaderVo, HttpAdapterExtraHeader> { //public interface HttpAdapterExtraHeaderMapper extends GenericMapper<HttpAdapterExtraHeaderVo, HttpAdapterExtraHeader> {
//
@Override // @Override
@Mapping(source = "id.name", target = "name") // @Mapping(source = "id.name", target = "name")
HttpAdapterExtraHeaderVo toVo(HttpAdapterExtraHeader entity); // HttpAdapterExtraHeaderVo toVo(HttpAdapterExtraHeader entity);
//
@Override // @Override
@InheritInverseConfiguration // @InheritInverseConfiguration
HttpAdapterExtraHeader toEntity(HttpAdapterExtraHeaderVo vo); // HttpAdapterExtraHeader toEntity(HttpAdapterExtraHeaderVo vo);
} //}
@@ -1,42 +1,80 @@
package com.eactive.eai.common.logger.mapper; 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.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.entity.onl.logger.HttpAdapterExtraLog;
import com.eactive.eai.data.mapper.BaseMapperConfig; import com.eactive.eai.data.mapper.BaseMapperConfig;
import com.eactive.eai.data.mapper.GenericMapper; 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 org.mapstruct.*;
import java.time.DayOfWeek;
import java.time.LocalDate; 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) @Slf4j
public interface HttpAdapterExtraLogMapper extends GenericMapper<HttpAdapterExtraLogVo, HttpAdapterExtraLog> { @Mapper(config = BaseMapperConfig.class)
public abstract class HttpAdapterExtraLogMapper implements GenericMapper<HttpAdapterExtraLogVo, HttpAdapterExtraLog> {
private final static ObjectMapper objectMapper = new ObjectMapper();
private static final DateTimeFormatter SDF_YYYYMMDD = DateTimeFormatter.ofPattern( "yyyyMMdd");
@Override @Override
@Mapping(source = "id.guid", target = "guid") @Mapping(source = "id.guid", target = "guid")
@Mapping(source = "id.serviceProcessNumber", target = "serviceProcessNumber") @Mapping(source = "id.serviceProcessNumber", target = "serviceProcessNumber")
HttpAdapterExtraLogVo toVo(HttpAdapterExtraLog entity); abstract public HttpAdapterExtraLogVo toVo(HttpAdapterExtraLog entity);
@Override @Override
@InheritInverseConfiguration @InheritInverseConfiguration
HttpAdapterExtraLog toEntity(HttpAdapterExtraLogVo vo); abstract public HttpAdapterExtraLog toEntity(HttpAdapterExtraLogVo vo);
@AfterMapping @AfterMapping
default void setHeaderIdAndWeekday(@MappingTarget HttpAdapterExtraLog entity, HttpAdapterExtraLogVo vo) { public void voToEntity(@MappingTarget HttpAdapterExtraLog entity, HttpAdapterExtraLogVo vo) {
DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek(); // 현재 요일
int dayOfWeekNumber = dayOfWeek.getValue() % 7 + 1; // 1 (일요일)부터 7 (토요일)까지 // 1. Set weekday for partition table
entity.getId().setWeekday(dayOfWeekNumber); // DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek(); // 현재 요일
Optional.ofNullable(entity.getHeaderList()) // int dayOfWeekNumber = dayOfWeek.getValue() % 7 + 1; // 1 (일요일)부터 7 (토요일)까지
.ifPresent(headers -> headers.forEach(header -> { // entity.getId().setWeekday(dayOfWeekNumber);
if (header.getId() == null) {
header.setId(new HttpAdapterExtraHeaderId()); // String prcs_date = SDF_YYYYMMDD.format(ZonedDateTime.now());
} String prcs_date = LocalDate.now().format(SDF_YYYYMMDD);
header.getId().setWeekday(dayOfWeekNumber); entity.getId().setPrcsDate(prcs_date);
header.getId().setGuid(vo.getGuid());
header.getId().setServiceProcessNumber(vo.getServiceProcessNumber()); // 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<HttpAdapterExtraHeaderVo> headerList = objectMapper.readValue(
headerContent,
new TypeReference<List<HttpAdapterExtraHeaderVo>>() {}
);
vo.setHeaderList(headerList);
} catch (JsonProcessingException e) {
log.warn("Http Header 역직렬화 실패", e);
vo.setHeaderList(Collections.emptyList());
}
} }
} }
@@ -101,7 +101,7 @@ public class HttpAdapterExtraLogUtil {
public static List<HttpAdapterExtraHeaderVo> convertHeaderToListOfHttpAdapterExtraHeaderVo(Header[] headers) { public static List<HttpAdapterExtraHeaderVo> convertHeaderToListOfHttpAdapterExtraHeaderVo(Header[] headers) {
Set<String> seenNames = new HashSet<>(); Set<String> seenNames = new HashSet<>();
return Arrays.stream(headers) return Arrays.stream(headers)
.filter(header -> seenNames.add(header.getName())) // 중복된 이름을 스킵 // .filter(header -> seenNames.add(header.getName())) // 중복된 이름을 스킵
.map(header -> new HttpAdapterExtraHeaderVo(header.getName(), header.getValue())) .map(header -> new HttpAdapterExtraHeaderVo(header.getName(), header.getValue()))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }