From daf33df5af9fd622d44b0b75fd84c6158daa3c6c Mon Sep 17 00:00:00 2001 From: cho Date: Sat, 10 Jan 2026 13:55:31 +0900 Subject: [PATCH] =?UTF-8?q?inbound=EC=97=90=20json=20=EC=A0=84=EB=AC=B8?= =?UTF-8?q?=EC=9D=BC=20=EB=95=8C,=20=EC=B5=9C=EC=83=81=EC=9C=84=EC=97=90?= =?UTF-8?q?=20Array('[]')=ED=83=80=EC=9E=85=EC=9D=B4=20=EB=B0=94=EB=A1=9C?= =?UTF-8?q?=20=EC=98=AC=EB=95=8C,=20=EB=B3=80=ED=99=98=EC=B2=98=EB=A6=AC?= =?UTF-8?q?=EB=A5=BC=20=EC=9C=84=ED=95=B4,=20KJB=5FROOTLESS=5FARRAY=20?= =?UTF-8?q?=EB=9D=BC=EB=8A=94=20=ED=82=A4=EC=9D=98=20Object=EB=A5=BC=20war?= =?UTF-8?q?raped=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/HttpClient5AdapterServiceRest.java | 31 ++++++++++++++++--- .../impl/HttpAdapterServiceStandard.java | 31 ++++++++++++++++++- 2 files changed, 57 insertions(+), 5 deletions(-) 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 4ee9b4c..a34e183 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 @@ -949,11 +949,23 @@ public class HttpClient5AdapterServiceRest extends HttpClient5AdapterServiceSupp if (eaiBody == null) { return; } + + if (eaiBody instanceof JSONObject) { + JSONObject jsonObject = (JSONObject) eaiBody; + if( jsonObject.containsKey("KJB_ROOTLESS_ARRAY") ) { + ContentType contentTypeObj = ContentType.create(contentType, charset); + JSONArray array = (JSONArray) jsonObject.get("KJB_ROOTLESS_ARRAY"); + StringEntity entity = new StringEntity(array.toJSONString(), contentTypeObj); + method.setEntity(entity); + return; + } + } if (StringUtils.contains(contentType, "application/x-www-form-urlencoded")) { if (eaiBody instanceof JSONObject) { List params = new ArrayList<>(); JSONObject jsonObject = (JSONObject) eaiBody; + for (Object key : jsonObject.keySet()) { //String encryptedValue = encrypt((String) jsonObject.get(key)); // encrypt by jwhong //params.add(new BasicNameValuePair((String) key, encryptedValue )); @@ -1456,11 +1468,22 @@ public class HttpClient5AdapterServiceRest extends HttpClient5AdapterServiceSupp @SuppressWarnings("deprecation") private JSONObject parseJson(String message) throws Exception { - if (message == null) { - return null; - } + if (message == null || message.trim().isEmpty()) { + return null; + } - return (JSONObject) JSONValue.parse(message); + Object obj = JSONValue.parse(message); + + if (obj instanceof JSONObject) { + return (JSONObject) obj; + } else if (obj instanceof JSONArray) { + // 배열일 경우 새로운 객체로 감싸서 반환 + JSONObject wrapper = new JSONObject(); + wrapper.put("KJB_ROOTLESS_ARRAY", obj); + return wrapper; + } + + return null; // 혹은 상황에 맞는 예외 처리 } private Document convertXmlDocument(String message) throws Exception { diff --git a/src/main/java/com/eactive/eai/adapter/http/dynamic/impl/HttpAdapterServiceStandard.java b/src/main/java/com/eactive/eai/adapter/http/dynamic/impl/HttpAdapterServiceStandard.java index 002999f..f50d367 100644 --- a/src/main/java/com/eactive/eai/adapter/http/dynamic/impl/HttpAdapterServiceStandard.java +++ b/src/main/java/com/eactive/eai/adapter/http/dynamic/impl/HttpAdapterServiceStandard.java @@ -19,6 +19,9 @@ import com.eactive.eai.inbound.processor.Processor; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.StopWatch; import org.apache.mina.common.ByteBuffer; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.JSONValue; import javax.servlet.ServletException; import javax.servlet.ServletInputStream; @@ -180,6 +183,21 @@ public class HttpAdapterServiceStandard extends HttpAdapterServiceSupport prop.put(PROPERTIES_NAME_HTTP_REQUEST_METHOD, request.getMethod()); prop.put(ALLOW_IP, httpProp.getProperty(ALLOW_IP, "")); + String body = new String ( requestBytes,encode); + + try { + Object root = JSONValue.parse(body); + if( root instanceof JSONArray ) { + JSONObject wrappedObject = new JSONObject(); + wrappedObject.put("KJB_ROOTLESS_ARRAY", root); + requestBytes = wrappedObject.toJSONString().getBytes(encode); + } + + }catch (Exception e) { + // ignore json이 아니기에 해줄것이 없음. + } + + // 로컬 서비스 호출 Object result = null; if (MessageUtil.isBytesMessage(messageType)) { @@ -208,7 +226,7 @@ public class HttpAdapterServiceStandard extends HttpAdapterServiceSupport responseData = ElinkConfig.getAsyncDummyDataForAdapterGroup(adptGrpName, adptName); } } - + response.setCharacterEncoding(encode); response.getWriter().print(responseData); if (traceLevel >= 3){ @@ -230,6 +248,17 @@ public class HttpAdapterServiceStandard extends HttpAdapterServiceSupport responseData = addData + responseData; } + + try { + Object root = JSONValue.parse(responseData); + if( root instanceof JSONObject ) { + JSONObject wrappedObject = (JSONObject) root; + responseData = wrappedObject.get("KJB_ROOTLESS_ARRAY").toString(); + } + + }catch (Exception e) { + // ignore json이 아니기에 해줄것이 없음. + } // 300응답에서 받은 Header정보 사용하기 위해 읽어옴. Map responsePropertyMap = new HashMap(); responsePropertyMap = (Map) prop.get(OUTBOUND_PROPERTY_MAP);