diff --git a/WebContent/jsp/onl/transaction/tracking/trackingManDetail.jsp b/WebContent/jsp/onl/transaction/tracking/trackingManDetail.jsp index d32d033..66bece0 100644 --- a/WebContent/jsp/onl/transaction/tracking/trackingManDetail.jsp +++ b/WebContent/jsp/onl/transaction/tracking/trackingManDetail.jsp @@ -211,6 +211,22 @@ layoutInfo = json.standardHeader; bzwkdatatntInfo = json.BZWKDATACTNT; + // bzwkdatatntInfoLength 파싱 및 패딩 처리 + let bzwkdatatntInfoLength = 0; + try { + bzwkdatatntInfoLength = parseInt(layoutInfo[layoutInfo.length - 2].value, 10); + if (isNaN(bzwkdatatntInfoLength)) { + bzwkdatatntInfoLength = 0; + } + } catch (e) { + bzwkdatatntInfoLength = 0; + } + + // bzwkdatatntInfo 패딩 적용 + if (bzwkdatatntInfoLength > 0 && bzwkdatatntInfo) { + bzwkdatatntInfo = padByteString(bzwkdatatntInfo, bzwkdatatntInfoLength); + } + if((isInboundPart && isInboundWithoutNet) || (isOutboundPart && isOutboundWithoutNet)){ selectHttpLog(url, prcsDate, json.EAISVCSERNO.trim(), logPrcssSerno); }else{ @@ -897,7 +913,39 @@ $(document).ready(function() { // console.log("변환 완료:", parsedList); } - + + /** + * 문자열의 바이트 수 계산 (한글 2바이트, 영문/숫자 1바이트) + */ + function getByteLength(str) { + let byteCount = 0; + for (let i = 0; i < str.length; i++) { + const charCode = str.charCodeAt(i); + byteCount += (charCode >= 0xAC00 && charCode <= 0xD7A3) ? 2 : 1; + } + return byteCount; + } + + /** + * 문자열을 주어진 바이트 수만큼 패딩 + * @param {string} str - 원본 문자열 + * @param {number} targetBytes - 목표 바이트 수 + * @param {string} position - 'left' 또는 'right' (기본: 'right') + * @param {string} padChar - 패딩 문자 (기본: 공백) + * @returns {string} - 패딩된 문자열 + */ + function padByteString(str, targetBytes, position = 'right', padChar = ' ') { + const currentBytes = getByteLength(str); + + if (currentBytes >= targetBytes) { + return str; // 이미 목표 바이트 이상이면 그대로 반환 + } + + const paddingBytes = targetBytes - currentBytes; + const padding = padChar.repeat(paddingBytes); + + return position === 'left' ? padding + str : str + padding; + } }); diff --git a/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/LayoutSyncController.java b/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/LayoutSyncController.java index 15604d6..b8df9ea 100644 --- a/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/LayoutSyncController.java +++ b/src/main/java/com/eactive/eai/rms/onl/manage/rule/layoutsync/LayoutSyncController.java @@ -404,7 +404,7 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements String resultS = null; ServletInputStream sis = null; - HashMap param = new HashMap(); + HashMap param = new HashMap<>(); String recvTime = DateUtil.getDateTime("yyyyMMddHHmmssSS").substring(0, 16); // 초기화 @@ -431,43 +431,33 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements byte[] arg = new byte[request.getContentLength()]; int resultSet = 0; int total = 0; - try { - resultSet = sis.readLine(arg, 0, arg.length); - while(resultSet != -1) { - total += resultSet; - resultSet = sis.readLine(arg, total, 1024); - } + + String xmlContent = null; + try { + resultSet = sis.readLine(arg, 0, arg.length); + while (resultSet != -1) { + total += resultSet; + resultSet = sis.readLine(arg, total, 1024); + } - // ===== 인코딩 확인 로그 시작 ===== - logger.info("========== 인코딩 디버깅 정보 =========="); - logger.info("request.getCharacterEncoding(): " + request.getCharacterEncoding()); - logger.info("request.getContentType(): " + request.getContentType()); - logger.info("Content Length: " + arg.length + " bytes"); + xmlContent = new String(arg, "EUC-KR"); + // ===== 인코딩 확인 로그 시작 ===== + logger.info("========== 인코딩 디버깅 정보 =========="); + // 다양한 인코딩으로 읽어보기 + logger.info("request.getCharacterEncoding(): {}", request.getCharacterEncoding()); + logger.info("request.getContentType(): {}", request.getContentType()); + logger.info("Content Length: {} bytes", arg.length); + logger.info("EUC-KR 전체 내용:\n{}", xmlContent); + logger.info("========================================"); + // ===== 인코딩 확인 로그 끝 ===== + param.put("recvData", xmlContent); + } catch (Exception e) { + logger.error("MessageSync.err - don't read the XML File", e); + param.put("recvData", ""); + } - // 다양한 인코딩으로 읽어보기 - String asDefaultEncoding = new String(arg); - String asUtf8 = new String(arg, "UTF-8"); - String asEucKr = new String(arg, "EUC-KR"); - - logger.info("Default Encoding 전체 내용:\n" + asDefaultEncoding); - logger.info("UTF-8 전체 내용:\n" + asUtf8); - logger.info("EUC-KR 전체 내용:\n" + asEucKr); - logger.info("========================================"); - // ===== 인코딩 확인 로그 끝 ===== - - param.put("recvData", new String(arg, "EUC-KR")); - } catch(Exception e) { - logger.error("MessageSync.err - don't read the XML File - " + new String(arg, "EUC-KR"), e); - param.put("recvData", ""); - } - - // byte[]로부터 XML 파싱 (BOM 제거) - EUC-KR로 읽기 - String xmlContent = new String(arg, "EUC-KR").trim(); - // BOM 제거 (UTF-8 BOM: EF BB BF) - if (xmlContent.startsWith("\uFEFF")) { - xmlContent = xmlContent.substring(1); - } - Document doc = builder.build(new ByteArrayInputStream(xmlContent.getBytes("EUC-KR"))); + // byte[]로부터 XML 파싱 - EUC-KR로 읽기 + Document doc = builder.build(new StringReader(xmlContent)); param.put("logPrcssSeqno", UUIDGenerator.getUUID()); // xml 1.1 @@ -485,9 +475,9 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements param.put("recvAmndHMS", recvTime); logger.info(layoutName + " command - [" + command +"]"); - HashMap returnMap = new HashMap(); + HashMap returnMap = new HashMap<>(); if( command.equals("delete") ) { - HashMap vo = new HashMap(); + HashMap vo = new HashMap<>(); vo.put("loutName",layoutName); service.deleteLayout(vo); @@ -513,10 +503,10 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements // } String layout = body.getChild("data").getText(); - logger.info(layoutName + " recv Data - [" + layout + "]"); + logger.info("{} recv Data - [{}]]", layoutName, layout); param.put("recvData", layout); - Document doc2 = builder.build(new ByteArrayInputStream(layout.getBytes())); + Document doc2 = builder.build(new StringReader(layout)); HashMap vo = new HashMap(); @@ -601,7 +591,6 @@ public class LayoutSyncController extends OnlBaseAnnotationController implements } catch( Exception e ) { logger.error("",e); - logger.error("",e.getStackTrace()[0]); try { if( results != null ) { if (e instanceof UseSystemException) {