가변 url 표준전문헤더값 추출 기능 추가
- stdHeaderGroup. prefix 사용
This commit is contained in:
+58
-8
@@ -71,6 +71,8 @@ import com.eactive.eai.common.util.JacksonUtil;
|
||||
import com.eactive.eai.common.util.RestSendBodyLogUtils;
|
||||
import com.eactive.eai.common.util.TxFileLogger;
|
||||
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.fasterxml.jackson.databind.JsonNode;
|
||||
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\" : ";
|
||||
|
||||
// URL Path Variable 이 표준전문(요청) 항목을 참조할 때 사용하는 접두어. 접두어 뒤는 표준전문 루트 기준 전체 경로.
|
||||
static final String STD_MSG_VARIABLE_PREFIX = "stdHeaderGroup.";
|
||||
|
||||
private boolean useAdapterToken;
|
||||
|
||||
/**
|
||||
@@ -242,9 +247,9 @@ public class HttpClient5AdapterServiceRest extends HttpClient5AdapterServiceSupp
|
||||
uri = vo.getUrl();
|
||||
} else {
|
||||
if (dataObject == null) {
|
||||
uri = changeUrl(messageType, vo.getUrl(), restOptionData, sendData, inboundPathVariables);
|
||||
uri = changeUrl(messageType, vo.getUrl(), restOptionData, sendData, inboundPathVariables, tempProp);
|
||||
} 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;
|
||||
}
|
||||
|
||||
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))) {
|
||||
try {
|
||||
if (StringUtils.isBlank(restOption)) {
|
||||
@@ -1188,19 +1194,30 @@ public class HttpClient5AdapterServiceRest extends HttpClient5AdapterServiceSupp
|
||||
// jsonObject = (JSONObject) JSONValue.parse((String) sendData);
|
||||
// }
|
||||
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;
|
||||
// if( jsonObject != null ) {
|
||||
// uriVariable = (String) jsonObject.get(urlVaribleId);
|
||||
// jsonObject.remove(urlVaribleId);
|
||||
// }
|
||||
|
||||
if (StringUtils.isBlank(uriVariable) && inboundPathVariables.containsKey(urlVaribleId)) {
|
||||
|
||||
if (StringUtils.isBlank(uriVariable) && inboundPathVariables != null
|
||||
&& inboundPathVariables.containsKey(urlVaribleId)) {
|
||||
uriVariable = inboundPathVariables.get(urlVaribleId);
|
||||
}
|
||||
|
||||
|
||||
// expand()는 이름이 아닌 순서로 매핑하므로 값이 없어도 자리를 유지해야 한다.
|
||||
if (uriVariable == null) {
|
||||
logger.warn("HttpClientAdapterServiceRest] uri variable not found=[" + urlVaribleId + "] ");
|
||||
uriVariable = "";
|
||||
}
|
||||
urlVariableList.add(uriVariable);
|
||||
|
||||
|
||||
}
|
||||
} else if (MessageType.XML.equals(messageType)) {
|
||||
Document doc;
|
||||
@@ -1211,7 +1228,17 @@ public class HttpClient5AdapterServiceRest extends HttpClient5AdapterServiceSupp
|
||||
}
|
||||
for (Object tempObject : uriVariables) {
|
||||
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);
|
||||
if (element == null) {
|
||||
logger.warn("HttpClientAdapterServiceRest] uri variable not found=[" + urlVaribleId + "] ");
|
||||
urlVariableList.add("");
|
||||
continue;
|
||||
}
|
||||
urlVariableList.add(element.getText());
|
||||
if (doc.getRootElement() == element) {
|
||||
doc = null;
|
||||
@@ -1234,6 +1261,29 @@ public class HttpClient5AdapterServiceRest extends HttpClient5AdapterServiceSupp
|
||||
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) {
|
||||
if (StringUtils.isBlank(extraPath)) {
|
||||
return baseUrl;
|
||||
|
||||
@@ -85,7 +85,10 @@ public interface HttpAdapterServiceKey {
|
||||
|
||||
//응답 처리 용 표준 전문 오브젝트
|
||||
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_APIKEY_HEADER_NAME = "ADAPTER_APIKEY_HEADER_NAME";
|
||||
|
||||
Reference in New Issue
Block a user