가변 url 표준전문헤더값 추출 기능 추가
- stdHeaderGroup. prefix 사용
This commit is contained in:
+55
-5
@@ -71,6 +71,8 @@ import com.eactive.eai.common.util.JacksonUtil;
|
|||||||
import com.eactive.eai.common.util.RestSendBodyLogUtils;
|
import com.eactive.eai.common.util.RestSendBodyLogUtils;
|
||||||
import com.eactive.eai.common.util.TxFileLogger;
|
import com.eactive.eai.common.util.TxFileLogger;
|
||||||
import com.eactive.eai.common.util.XMLUtils;
|
import com.eactive.eai.common.util.XMLUtils;
|
||||||
|
import com.eactive.eai.message.StandardItem;
|
||||||
|
import com.eactive.eai.message.StandardMessage;
|
||||||
import com.eactive.eai.util.JsonPathUtil;
|
import com.eactive.eai.util.JsonPathUtil;
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
@@ -110,6 +112,9 @@ public class HttpClient5AdapterServiceRest extends HttpClient5AdapterServiceSupp
|
|||||||
|
|
||||||
static final String DJB_ROOTLESS_ARRAY = "{ \"DJB_ROOTLESS_ARRAY\" : ";
|
static final String DJB_ROOTLESS_ARRAY = "{ \"DJB_ROOTLESS_ARRAY\" : ";
|
||||||
|
|
||||||
|
// URL Path Variable 이 표준전문(요청) 항목을 참조할 때 사용하는 접두어. 접두어 뒤는 표준전문 루트 기준 전체 경로.
|
||||||
|
static final String STD_MSG_VARIABLE_PREFIX = "stdHeaderGroup.";
|
||||||
|
|
||||||
private boolean useAdapterToken;
|
private boolean useAdapterToken;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -242,9 +247,9 @@ public class HttpClient5AdapterServiceRest extends HttpClient5AdapterServiceSupp
|
|||||||
uri = vo.getUrl();
|
uri = vo.getUrl();
|
||||||
} else {
|
} else {
|
||||||
if (dataObject == null) {
|
if (dataObject == null) {
|
||||||
uri = changeUrl(messageType, vo.getUrl(), restOptionData, sendData, inboundPathVariables);
|
uri = changeUrl(messageType, vo.getUrl(), restOptionData, sendData, inboundPathVariables, tempProp);
|
||||||
} else {
|
} else {
|
||||||
uri = changeUrl(messageType, vo.getUrl(), restOptionData, dataObject, inboundPathVariables);
|
uri = changeUrl(messageType, vo.getUrl(), restOptionData, dataObject, inboundPathVariables, tempProp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1155,7 +1160,8 @@ public class HttpClient5AdapterServiceRest extends HttpClient5AdapterServiceSupp
|
|||||||
return document;
|
return document;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String changeUrl(String messageType, String url, String restOption, Object sendData, Map<String, String> inboundPathVariables) {
|
private String changeUrl(String messageType, String url, String restOption, Object sendData,
|
||||||
|
Map<String, String> inboundPathVariables, Properties tempProp) {
|
||||||
if ((MessageType.JSON.equals(messageType) || MessageType.XML.equals(messageType))) {
|
if ((MessageType.JSON.equals(messageType) || MessageType.XML.equals(messageType))) {
|
||||||
try {
|
try {
|
||||||
if (StringUtils.isBlank(restOption)) {
|
if (StringUtils.isBlank(restOption)) {
|
||||||
@@ -1188,17 +1194,28 @@ public class HttpClient5AdapterServiceRest extends HttpClient5AdapterServiceSupp
|
|||||||
// jsonObject = (JSONObject) JSONValue.parse((String) sendData);
|
// jsonObject = (JSONObject) JSONValue.parse((String) sendData);
|
||||||
// }
|
// }
|
||||||
for (String urlVaribleId : uriVariables) {
|
for (String urlVaribleId : uriVariables) {
|
||||||
String uriVariable = JsonPathUtil.getAt(jsonNode, urlVaribleId, "\\.");
|
String uriVariable;
|
||||||
|
if (urlVaribleId.startsWith(STD_MSG_VARIABLE_PREFIX)) {
|
||||||
|
uriVariable = getStandardMessageValue(tempProp, urlVaribleId);
|
||||||
|
} else {
|
||||||
|
uriVariable = JsonPathUtil.getAt(jsonNode, urlVaribleId, "\\.");
|
||||||
|
}
|
||||||
// String uriVariable = null;
|
// String uriVariable = null;
|
||||||
// if( jsonObject != null ) {
|
// if( jsonObject != null ) {
|
||||||
// uriVariable = (String) jsonObject.get(urlVaribleId);
|
// uriVariable = (String) jsonObject.get(urlVaribleId);
|
||||||
// jsonObject.remove(urlVaribleId);
|
// jsonObject.remove(urlVaribleId);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
if (StringUtils.isBlank(uriVariable) && inboundPathVariables.containsKey(urlVaribleId)) {
|
if (StringUtils.isBlank(uriVariable) && inboundPathVariables != null
|
||||||
|
&& inboundPathVariables.containsKey(urlVaribleId)) {
|
||||||
uriVariable = inboundPathVariables.get(urlVaribleId);
|
uriVariable = inboundPathVariables.get(urlVaribleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// expand()는 이름이 아닌 순서로 매핑하므로 값이 없어도 자리를 유지해야 한다.
|
||||||
|
if (uriVariable == null) {
|
||||||
|
logger.warn("HttpClientAdapterServiceRest] uri variable not found=[" + urlVaribleId + "] ");
|
||||||
|
uriVariable = "";
|
||||||
|
}
|
||||||
urlVariableList.add(uriVariable);
|
urlVariableList.add(uriVariable);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1211,7 +1228,17 @@ public class HttpClient5AdapterServiceRest extends HttpClient5AdapterServiceSupp
|
|||||||
}
|
}
|
||||||
for (Object tempObject : uriVariables) {
|
for (Object tempObject : uriVariables) {
|
||||||
String urlVaribleId = (String) tempObject;
|
String urlVaribleId = (String) tempObject;
|
||||||
|
if (urlVaribleId.startsWith(STD_MSG_VARIABLE_PREFIX)) {
|
||||||
|
String stdValue = getStandardMessageValue(tempProp, urlVaribleId);
|
||||||
|
urlVariableList.add(stdValue == null ? "" : stdValue);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
Element element = (Element) doc.selectSingleNode("//" + urlVaribleId);
|
Element element = (Element) doc.selectSingleNode("//" + urlVaribleId);
|
||||||
|
if (element == null) {
|
||||||
|
logger.warn("HttpClientAdapterServiceRest] uri variable not found=[" + urlVaribleId + "] ");
|
||||||
|
urlVariableList.add("");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
urlVariableList.add(element.getText());
|
urlVariableList.add(element.getText());
|
||||||
if (doc.getRootElement() == element) {
|
if (doc.getRootElement() == element) {
|
||||||
doc = null;
|
doc = null;
|
||||||
@@ -1234,6 +1261,29 @@ public class HttpClient5AdapterServiceRest extends HttpClient5AdapterServiceSupp
|
|||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL Path Variable 이 {@code stdHeaderGroup.} 접두어를 가지면 요청 표준전문에서 값을 찾는다.
|
||||||
|
*
|
||||||
|
* @param tempProp 어댑터 임시 속성 (요청 표준전문 보관)
|
||||||
|
* @param urlVaribleId 접두어를 포함한 Path Variable 이름
|
||||||
|
* @return 표준전문 항목 값. 표준전문이 없거나 항목을 찾지 못하면 null
|
||||||
|
*/
|
||||||
|
private String getStandardMessageValue(Properties tempProp, String urlVaribleId) {
|
||||||
|
Object stdMessageObject = tempProp.get(HttpAdapterServiceKey.OUT_REQ_STD_MSG);
|
||||||
|
if (!(stdMessageObject instanceof StandardMessage)) {
|
||||||
|
logger.warn("HttpClientAdapterServiceRest] request standard message not found=[" + urlVaribleId + "] ");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
// 접두어는 표기용 이름이므로 제거한 나머지가 표준전문 루트 기준 전체 경로가 된다.
|
||||||
|
String itemPath = urlVaribleId.substring(STD_MSG_VARIABLE_PREFIX.length());
|
||||||
|
StandardItem item = ((StandardMessage) stdMessageObject).findItem(itemPath);
|
||||||
|
if (item == null) {
|
||||||
|
logger.warn("HttpClientAdapterServiceRest] standard message item not found=[" + itemPath + "] ");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return item.getValue();
|
||||||
|
}
|
||||||
|
|
||||||
private String getUrl(String baseUrl, String extraPath) {
|
private String getUrl(String baseUrl, String extraPath) {
|
||||||
if (StringUtils.isBlank(extraPath)) {
|
if (StringUtils.isBlank(extraPath)) {
|
||||||
return baseUrl;
|
return baseUrl;
|
||||||
|
|||||||
@@ -86,6 +86,9 @@ public interface HttpAdapterServiceKey {
|
|||||||
//응답 처리 용 표준 전문 오브젝트
|
//응답 처리 용 표준 전문 오브젝트
|
||||||
static final String STANDARD_MESSAGE_OBJECT = "STANDARD_MESSAGE_OBJECT";
|
static final String STANDARD_MESSAGE_OBJECT = "STANDARD_MESSAGE_OBJECT";
|
||||||
|
|
||||||
|
//송신(Outbound) 요청 표준 전문 오브젝트
|
||||||
|
static final String OUT_REQ_STD_MSG = "OUT_REQ_STD_MSG";
|
||||||
|
|
||||||
// 어댑터별 인증 키 헤더 이름
|
// 어댑터별 인증 키 헤더 이름
|
||||||
static final String ADAPTER_TOKEN_HEADER_NAME = "ADAPTER_TOKEN_HEADER_NAME";
|
static final String ADAPTER_TOKEN_HEADER_NAME = "ADAPTER_TOKEN_HEADER_NAME";
|
||||||
static final String ADAPTER_APIKEY_HEADER_NAME = "ADAPTER_APIKEY_HEADER_NAME";
|
static final String ADAPTER_APIKEY_HEADER_NAME = "ADAPTER_APIKEY_HEADER_NAME";
|
||||||
|
|||||||
Reference in New Issue
Block a user