Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d81aeeef67 | |||
| 5dae063fe5 | |||
| 024b24af49 | |||
| 6807e2b947 | |||
| 56fc66faa0 | |||
| 126f41624d | |||
| ae6ed9b262 | |||
| 6f5af2ac69 | |||
| 6fd9caa7d4 | |||
| 68cf1dff16 | |||
| bebf5fa36d | |||
| dd9fc6fbdb | |||
| 71686fb387 | |||
| bc8b549a33 | |||
| 56ac438265 | |||
| 791e362a74 |
+2
-2
@@ -86,8 +86,8 @@ dependencies {
|
|||||||
api 'org.java-websocket:Java-WebSocket:1.3.9'
|
api 'org.java-websocket:Java-WebSocket:1.3.9'
|
||||||
api 'javax.cache:cache-api:1.1.1'
|
api 'javax.cache:cache-api:1.1.1'
|
||||||
|
|
||||||
api 'org.apache.ignite:ignite-slf4j:2.16.0'
|
api 'org.apache.ignite:ignite-slf4j:2.14.0'
|
||||||
api 'org.apache.ignite:ignite-kubernetes:2.16.0'
|
api 'org.apache.ignite:ignite-kubernetes:2.14.0'
|
||||||
// ignite 2.17 - JDK 11 이상 필요
|
// ignite 2.17 - JDK 11 이상 필요
|
||||||
// api 'org.apache.ignite:ignite-slf4j:2.17.0'
|
// api 'org.apache.ignite:ignite-slf4j:2.17.0'
|
||||||
// api 'org.apache.ignite:ignite-kubernetes:2.17.0'
|
// api 'org.apache.ignite:ignite-kubernetes:2.17.0'
|
||||||
|
|||||||
+27
-3
@@ -53,6 +53,8 @@ public abstract class HttpClient5AdapterServiceSupport implements HttpClientAdap
|
|||||||
|
|
||||||
private static boolean testMode = TestModeChecker.isTestMode();
|
private static boolean testMode = TestModeChecker.isTestMode();
|
||||||
|
|
||||||
|
private static boolean httpHeaderLogMode = HttpAdapterExtraLogUtil.isHttpHeaderMode();
|
||||||
|
|
||||||
public synchronized void close() {
|
public synchronized void close() {
|
||||||
if(connectionManager != null) {
|
if(connectionManager != null) {
|
||||||
connectionManager.close();
|
connectionManager.close();
|
||||||
@@ -366,8 +368,20 @@ public abstract class HttpClient5AdapterServiceSupport implements HttpClientAdap
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sslContext = SSLContextBuilder.create().loadTrustMaterial(new TrustAllStrategy()).build();
|
sslContext = SSLContextBuilder.create().loadTrustMaterial(new TrustAllStrategy()).build();
|
||||||
SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext);
|
SSLConnectionSocketFactory sslSocketFactory = null;
|
||||||
cmBuilder.setSSLSocketFactory(csf);
|
if(testMode) {
|
||||||
|
// Hostname verifier 비활성화 (테스트용)
|
||||||
|
sslSocketFactory = new SSLConnectionSocketFactory(
|
||||||
|
sslContext
|
||||||
|
, NoopHostnameVerifier.INSTANCE
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sslSocketFactory = new SSLConnectionSocketFactory(
|
||||||
|
sslContext
|
||||||
|
);
|
||||||
|
}
|
||||||
|
cmBuilder.setSSLSocketFactory(sslSocketFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException
|
} catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException
|
||||||
@@ -384,6 +398,11 @@ public abstract class HttpClient5AdapterServiceSupport implements HttpClientAdap
|
|||||||
|
|
||||||
|
|
||||||
HttpRequestInterceptor requestLogInterceptor = (request, entity, context) -> {
|
HttpRequestInterceptor requestLogInterceptor = (request, entity, context) -> {
|
||||||
|
if (!httpHeaderLogMode) {
|
||||||
|
logger.info("httpHeader logging off - use.http.header.log");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
String uuid = (String) context.getAttribute(TransactionContextKeys.TRANSACTION_UUID);
|
String uuid = (String) context.getAttribute(TransactionContextKeys.TRANSACTION_UUID);
|
||||||
String contextAdapterGroupName = (String) context.getAttribute(HttpClientAdapterServiceKey.ADAPTER_GROUP_NAME);
|
String contextAdapterGroupName = (String) context.getAttribute(HttpClientAdapterServiceKey.ADAPTER_GROUP_NAME);
|
||||||
@@ -403,7 +422,12 @@ public abstract class HttpClient5AdapterServiceSupport implements HttpClientAdap
|
|||||||
};
|
};
|
||||||
|
|
||||||
HttpResponseInterceptor responseLogInterceptor = (response, entity, context) -> {
|
HttpResponseInterceptor responseLogInterceptor = (response, entity, context) -> {
|
||||||
try{
|
if (!httpHeaderLogMode) {
|
||||||
|
logger.info("httpHeader logging off - use.http.header.log");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try{
|
||||||
HttpRequest request = (HttpRequest)context.getAttribute("http.request");
|
HttpRequest request = (HttpRequest)context.getAttribute("http.request");
|
||||||
String url = request.getUri().toString();
|
String url = request.getUri().toString();
|
||||||
String uuid = (String) context.getAttribute(TransactionContextKeys.TRANSACTION_UUID);
|
String uuid = (String) context.getAttribute(TransactionContextKeys.TRANSACTION_UUID);
|
||||||
|
|||||||
@@ -10,29 +10,35 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
import com.eactive.eai.adapter.AdapterGroupVO;
|
import com.eactive.eai.adapter.AdapterGroupVO;
|
||||||
import com.eactive.eai.adapter.AdapterManager;
|
import com.eactive.eai.adapter.AdapterManager;
|
||||||
import com.eactive.eai.adapter.RequestDispatcher;
|
import com.eactive.eai.adapter.RequestDispatcher;
|
||||||
|
import com.eactive.eai.adapter.http.HttpStatusException;
|
||||||
import com.eactive.eai.adapter.http.client.HttpClientAdapterServiceKey;
|
import com.eactive.eai.adapter.http.client.HttpClientAdapterServiceKey;
|
||||||
import com.eactive.eai.adapter.http.dynamic.filter.HttpAdapterFilter;
|
import com.eactive.eai.adapter.http.dynamic.filter.HttpAdapterFilter;
|
||||||
import com.eactive.eai.adapter.http.dynamic.filter.HttpAdapterFilterFactoryKjb;
|
import com.eactive.eai.adapter.http.dynamic.filter.HttpAdapterFilterFactoryKjb;
|
||||||
import com.eactive.eai.adapter.http.dynamic.filter.HttpAdapterFilterType;
|
import com.eactive.eai.adapter.http.dynamic.filter.HttpAdapterFilterType;
|
||||||
|
import com.eactive.eai.adapter.http.dynamic.filter.JwtAuthException;
|
||||||
|
import com.eactive.eai.common.util.Logger;
|
||||||
|
|
||||||
public abstract class HttpAdapterServiceSupport implements HttpAdapterService, HttpAdapterServiceKey {
|
public abstract class HttpAdapterServiceSupport implements HttpAdapterService, HttpAdapterServiceKey {
|
||||||
|
private static final String LOG_PREFIX = "HttpAdapterServiceSupport] ";
|
||||||
protected long slowTranTime = 2000L;
|
protected long slowTranTime = 2000L;
|
||||||
public static final String HEADER_NAME_CLIENT_ID = "x-elink-client-id";
|
public static final String HEADER_NAME_CLIENT_ID = "x-elink-client-id";
|
||||||
public static final String PROPERTIES_NAME_CLIENT_ID = "clientId";
|
public static final String PROPERTIES_NAME_CLIENT_ID = "clientId";
|
||||||
|
static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER);
|
||||||
|
|
||||||
public Object service(String adptGrpName, String adptName, Object message, Properties prop,
|
public Object service(String adptGrpName, String adptName, Object message, Properties prop,
|
||||||
HttpServletRequest request, HttpServletResponse response) throws Exception {
|
HttpServletRequest request, HttpServletResponse response) throws Exception {
|
||||||
|
|
||||||
|
String transactionId = request.getHeader(HttpClientAdapterServiceKey.TRANSACTION_ID);
|
||||||
|
if (StringUtils.isNotBlank(transactionId)) {
|
||||||
|
prop.put(HttpClientAdapterServiceKey.TRANSACTION_ID, transactionId);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
String clientId = request.getHeader(HEADER_NAME_CLIENT_ID);
|
String clientId = request.getHeader(HEADER_NAME_CLIENT_ID);
|
||||||
if (StringUtils.isNotBlank(clientId)) {
|
if (StringUtils.isNotBlank(clientId)) {
|
||||||
prop.put(PROPERTIES_NAME_CLIENT_ID, clientId);
|
prop.put(PROPERTIES_NAME_CLIENT_ID, clientId);
|
||||||
}
|
}
|
||||||
|
|
||||||
String transactionId = request.getHeader(HttpClientAdapterServiceKey.TRANSACTION_ID);
|
|
||||||
if (StringUtils.isNotBlank(transactionId)) {
|
|
||||||
prop.put(HttpClientAdapterServiceKey.TRANSACTION_ID, transactionId);
|
|
||||||
}
|
|
||||||
|
|
||||||
String instanceId = request.getHeader(HttpClientAdapterServiceKey.INSTANCE_ID);
|
String instanceId = request.getHeader(HttpClientAdapterServiceKey.INSTANCE_ID);
|
||||||
if (StringUtils.isNotBlank(instanceId)) {
|
if (StringUtils.isNotBlank(instanceId)) {
|
||||||
prop.put(HttpClientAdapterServiceKey.INSTANCE_ID, instanceId);
|
prop.put(HttpClientAdapterServiceKey.INSTANCE_ID, instanceId);
|
||||||
@@ -40,9 +46,26 @@ public abstract class HttpAdapterServiceSupport implements HttpAdapterService, H
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
}
|
}
|
||||||
|
|
||||||
message = doPreFilters(adptGrpName, adptName, message, prop, request, response);
|
Object obj = null;
|
||||||
Object obj = RequestDispatcher.getRequestDispatcher(adptGrpName).handle(adptName, message, prop);
|
try {
|
||||||
obj = doPostFilters(adptGrpName, adptName, obj, prop, request, response);
|
message = doPreFilters(adptGrpName, adptName, message, prop, request, response);
|
||||||
|
obj = RequestDispatcher.getRequestDispatcher(adptGrpName).handle(adptName, message, prop);
|
||||||
|
obj = doPostFilters(adptGrpName, adptName, obj, prop, request, response);
|
||||||
|
} catch (HttpStatusException e) { // inbound error
|
||||||
|
logger.warn(LOG_PREFIX + transactionId + "-" + adptGrpName + "-" + adptName + ">>" + e.getMessage(), e);
|
||||||
|
throw e;
|
||||||
|
} catch (JwtAuthException e) { // filter error
|
||||||
|
logger.error(LOG_PREFIX + transactionId + "-" + adptGrpName + "-" + adptName + ">>" + e.getMessage(), e);
|
||||||
|
UnkownMessageLogUtils.logUnkownMessage(adptGrpName, adptName, message, prop, request, response,
|
||||||
|
"RECEAIIRP202", e);
|
||||||
|
throw e;
|
||||||
|
} catch (Exception e) { // filter error
|
||||||
|
logger.error(LOG_PREFIX + transactionId + "-" + adptGrpName + "-" + adptName + ">>" + e.getMessage(), e);
|
||||||
|
UnkownMessageLogUtils.logUnkownMessage(adptGrpName, adptName, message, prop, request, response,
|
||||||
|
"RECEAIIRP201", e);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
|
||||||
if (obj == null) {
|
if (obj == null) {
|
||||||
return null;
|
return null;
|
||||||
} else if (obj instanceof byte[]) {
|
} else if (obj instanceof byte[]) {
|
||||||
|
|||||||
@@ -0,0 +1,149 @@
|
|||||||
|
package com.eactive.eai.adapter.http.dynamic;
|
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.nio.charset.Charset;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import com.eactive.eai.adapter.AdapterGroupVO;
|
||||||
|
import com.eactive.eai.adapter.AdapterManager;
|
||||||
|
import com.eactive.eai.adapter.http.client.HttpClientAdapterServiceKey;
|
||||||
|
import com.eactive.eai.common.exception.ExceptionUtil;
|
||||||
|
import com.eactive.eai.common.server.EAIServerManager;
|
||||||
|
import com.eactive.eai.common.util.DatetimeUtil;
|
||||||
|
import com.eactive.eai.common.util.InboundErrorLogger;
|
||||||
|
import com.eactive.eai.common.util.Logger;
|
||||||
|
import com.eactive.eai.common.util.UUIDGenerator;
|
||||||
|
import com.eactive.eai.inbound.error.InboundErrorInfoVO;
|
||||||
|
import com.eactive.eai.inbound.error.InboundErrorKeys;
|
||||||
|
import com.eactive.eai.util.HexaConverter;
|
||||||
|
|
||||||
|
public class UnkownMessageLogUtils {
|
||||||
|
static Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
|
||||||
|
|
||||||
|
private UnkownMessageLogUtils() {
|
||||||
|
throw new IllegalStateException("Utility class");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void logUnkownMessage(String adptGrpName, String adptName, Object message, Properties prop,
|
||||||
|
HttpServletRequest request, HttpServletResponse response, String errCode, Exception e) {
|
||||||
|
try {
|
||||||
|
EAIServerManager eaiServerManager = EAIServerManager.getInstance();
|
||||||
|
String serverName = eaiServerManager.getLocalServerName();
|
||||||
|
String txId = prop.getProperty(HttpClientAdapterServiceKey.TRANSACTION_ID);
|
||||||
|
if(StringUtils.isEmpty(txId)) {
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
|
||||||
|
String instanceid1 = serverName.substring(0,2);
|
||||||
|
String instanceid2 = serverName.substring(serverName.length()-2, serverName.length());
|
||||||
|
String instid = instanceid1 + instanceid2;
|
||||||
|
txId = instid + UUIDGenerator.getUUID();
|
||||||
|
}
|
||||||
|
String clientId = prop.getProperty("clientId");
|
||||||
|
String hexClientId = clientId != null ? HexaConverter.bytesToHexa(clientId.getBytes()) : "";
|
||||||
|
String errorMsg = ExceptionUtil.make(e, errCode);
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
sb.append(errorMsg).append("\n").append("Remote Addr : ").append(request.getRemoteAddr()).append("\n").append("Request URI : ")
|
||||||
|
.append(request.getRequestURI()).append("\n").append("clientId=").append(clientId).append(",hexClientId=").append(hexClientId).append(",txProp=").append(prop).append("\n").append("Exception : ").append(e.getMessage());
|
||||||
|
UnkownMessageLogUtils.logUnknownMessage(txId, adptGrpName, adptName,
|
||||||
|
"", "", false, errCode, sb.toString(), System.currentTimeMillis(),
|
||||||
|
serverName, InboundErrorKeys.IN_UNKNOWN, message);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
logger.warn("unkown log fail.", ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// public static void logUnkownMessage(String uuid, String adapterGroupName, String adapterName, String errCode,
|
||||||
|
// String errMsg, Object message) {
|
||||||
|
// UnkownMessageLogUtils.logUnknownMessage(uuid, adapterGroupName, adapterName,
|
||||||
|
// "", "", false, errCode, errMsg, System.currentTimeMillis(),
|
||||||
|
// EAIServerManager.getInstance().getInstId(), InboundErrorKeys.IN_UNKNOWN, message);
|
||||||
|
// }
|
||||||
|
|
||||||
|
private static void logUnknownMessage(String uuid, String adapterGroupName, String adapterName,
|
||||||
|
String bzwkSvcKeyName, String eaiSvcCd, boolean isTasStarted, String errCode, String errMsg, long errTm,
|
||||||
|
String svcInstNm, String errDstCd, Object message) {
|
||||||
|
String msg = null;
|
||||||
|
|
||||||
|
if(errDstCd == null || errDstCd.length() ==0) {
|
||||||
|
errDstCd = "ND";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isTasStarted) {
|
||||||
|
errDstCd = InboundErrorKeys.TAS_START;
|
||||||
|
}
|
||||||
|
|
||||||
|
InboundErrorInfoVO errorInfoVO = new InboundErrorInfoVO();
|
||||||
|
errorInfoVO.setEaiSvcSno(uuid); // EAI서비스일련번호
|
||||||
|
errorInfoVO.setAdptBwkGrpNm(adapterGroupName); // 어댑터업무그룹명
|
||||||
|
errorInfoVO.setEaiSvcCd(eaiSvcCd);
|
||||||
|
errorInfoVO.setErrCd(errCode); // 에러코드
|
||||||
|
errorInfoVO.setErrTxt(errMsg); // 에러내용
|
||||||
|
errorInfoVO.setErrTm(DatetimeUtil.getCurrentTime(errTm)); // 에러발생시각
|
||||||
|
errorInfoVO.setErrDstcd(errDstCd);
|
||||||
|
errorInfoVO.setBzwkSvcKeyName(bzwkSvcKeyName);
|
||||||
|
|
||||||
|
if(message == null) {
|
||||||
|
msg = "null";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(message instanceof byte[]) {
|
||||||
|
AdapterManager adapterManager = AdapterManager.getInstance();
|
||||||
|
AdapterGroupVO srcAdapterGrpVO = adapterManager.getAdapterGroupVO(adapterGroupName);
|
||||||
|
|
||||||
|
// TAS 거래일 경우 NULL일 수 있음
|
||||||
|
if(srcAdapterGrpVO == null) {
|
||||||
|
msg = new String((byte[])message);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// String srcAdapterMsgType = srcAdapterGrpVO.getMessageType();
|
||||||
|
// if( MessageUtil.isUTF8(srcAdapterMsgType) ) {
|
||||||
|
// try {
|
||||||
|
// msg = new String((byte[])message, UJSONMessage.encode);
|
||||||
|
// } catch (UnsupportedEncodingException e) {
|
||||||
|
// logger.warn("msg encode error", e);
|
||||||
|
// msg = new String((byte[])message); }
|
||||||
|
// }
|
||||||
|
// else {
|
||||||
|
// msg = new String((byte[])message);
|
||||||
|
// }
|
||||||
|
|
||||||
|
String charset = StringUtils.defaultIfBlank(srcAdapterGrpVO.getMessageEncode(), Charset.defaultCharset().name());
|
||||||
|
try {
|
||||||
|
msg = new String((byte[])message, charset);
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
logger.warn("msg encode error", e);
|
||||||
|
msg = new String((byte[])message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if(message instanceof String) {
|
||||||
|
msg = (String)message;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
msg = "invaild message ["+message.getClass().getName()+"] "+message.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
errorInfoVO.setBwkDataTxt(msg); // 업무데이터내용
|
||||||
|
errorInfoVO.setEaiSvrInstNm(svcInstNm); // EAI서버인스턴스명
|
||||||
|
|
||||||
|
InboundErrorLogger.error(errorInfoVO);
|
||||||
|
|
||||||
|
if (logger.isError()) {
|
||||||
|
logger.error("======================================================================" );
|
||||||
|
logger.error(" RequestDispatcher] GET UNKNOWN MESSAGE");
|
||||||
|
logger.error(" ADAPTER GROUP NAME [" + adapterGroupName + "]");
|
||||||
|
logger.error(" EAISVCNAME [" + eaiSvcCd + "]");
|
||||||
|
logger.error(" ADAPTER NAME [" + adapterName + "]");
|
||||||
|
logger.error("======================================================================" );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -104,7 +104,8 @@ public class ApiAuthFilter implements HttpAdapterFilter {
|
|||||||
*/
|
*/
|
||||||
StandardMessage standardMessage = STDMessageManager.getInstance().getSTDMessage(apiId);
|
StandardMessage standardMessage = STDMessageManager.getInstance().getSTDMessage(apiId);
|
||||||
String eaiSvcCd = StandardMessageManager.getInstance().getMapper().getEaiSvcCode(standardMessage);
|
String eaiSvcCd = StandardMessageManager.getInstance().getMapper().getEaiSvcCode(standardMessage);
|
||||||
if(!StringUtils.equals(eaiSvcCd, prop.getProperty("API_SERVICE_CODE"))) eaiSvcCd = prop.getProperty("API_SERVICE_CODE");
|
// if (StringUtils.isNotEmpty(eaiSvcCd) && !StringUtils.equals(eaiSvcCd, ))
|
||||||
|
// eaiSvcCd = prop.getProperty("API_SERVICE_CODE");
|
||||||
EAIMessage eaiMessage = EAIMessageManager.getInstance().getEAIMessage(eaiSvcCd);
|
EAIMessage eaiMessage = EAIMessageManager.getInstance().getEAIMessage(eaiSvcCd);
|
||||||
|
|
||||||
if(StringUtils.isBlank(eaiMessage.getAuthType())){
|
if(StringUtils.isBlank(eaiMessage.getAuthType())){
|
||||||
@@ -305,7 +306,8 @@ public class ApiAuthFilter implements HttpAdapterFilter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String extractBearerToken(HttpServletRequest request) throws JwtAuthException {
|
public static String extractBearerToken(HttpServletRequest request) throws JwtAuthException {
|
||||||
String authorization = request.getHeader("Authorization");
|
String tokenHeaderName = PropManager.getInstance().getProperty("ApiConfig", "token.header.name", "Authorization");
|
||||||
|
String authorization = request.getHeader(tokenHeaderName);
|
||||||
if (StringUtils.isBlank(authorization)) {
|
if (StringUtils.isBlank(authorization)) {
|
||||||
// QueryString으로 전달된 access_token 파라미터 확인
|
// QueryString으로 전달된 access_token 파라미터 확인
|
||||||
String tokenParamName = PropManager.getInstance().getProperty("ApiConfig", "token.param.name", "access_token");
|
String tokenParamName = PropManager.getInstance().getProperty("ApiConfig", "token.param.name", "access_token");
|
||||||
@@ -313,13 +315,13 @@ public class ApiAuthFilter implements HttpAdapterFilter {
|
|||||||
if (StringUtils.isNotBlank(queryToken)) {
|
if (StringUtils.isNotBlank(queryToken)) {
|
||||||
return queryToken.trim();
|
return queryToken.trim();
|
||||||
}
|
}
|
||||||
throw new JwtAuthException(ERROR_AUTHENTICATION_FAIL, "No have header info: Authorization");
|
throw new JwtAuthException(ERROR_AUTHENTICATION_FAIL, "No have header info: " + tokenHeaderName);
|
||||||
}
|
}
|
||||||
|
|
||||||
String[] components = authorization.split("\\s");
|
String[] components = authorization.trim().split("\\s+", 2);
|
||||||
|
|
||||||
if (components.length != 2) {
|
if (components.length != 2) {
|
||||||
throw new JwtAuthException(ERROR_AUTHENTICATION_FAIL, "Malformat [Authorization] content");
|
throw new JwtAuthException(ERROR_AUTHENTICATION_FAIL, "Malformat [" + tokenHeaderName + "] content");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!StringUtils.equalsIgnoreCase(components[0], "Bearer")) {
|
if (!StringUtils.equalsIgnoreCase(components[0], "Bearer")) {
|
||||||
|
|||||||
+1
-1
@@ -45,7 +45,7 @@ public class HttpAdapterServiceBypass extends HttpAdapterServiceSupport {
|
|||||||
public static final String HTTP_STATUS = "HTTP_STATUS";
|
public static final String HTTP_STATUS = "HTTP_STATUS";
|
||||||
public static final String PROPERTIES_NAME_HTTP_REQUEST_METHOD = "httpRequestMethod";
|
public static final String PROPERTIES_NAME_HTTP_REQUEST_METHOD = "httpRequestMethod";
|
||||||
public static final String[] HOP_BY_HOP_HEADERS = new String[] { "Connection", "Keep-Alive", "Proxy-Authenticate",
|
public static final String[] HOP_BY_HOP_HEADERS = new String[] { "Connection", "Keep-Alive", "Proxy-Authenticate",
|
||||||
"Proxy-Authorization", "TE", "Trailers", "Transfer-Encoding", "Upgrade" };
|
"Proxy-Authorization", "TE", "Trailers", "Trailer", "Transfer-Encoding", "Upgrade" };
|
||||||
|
|
||||||
protected boolean doPreserveCookies = false;
|
protected boolean doPreserveCookies = false;
|
||||||
protected boolean doPreserveCookiePath = false;
|
protected boolean doPreserveCookiePath = false;
|
||||||
|
|||||||
@@ -21,6 +21,10 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
public class HttpAdapterExtraLogUtil {
|
public class HttpAdapterExtraLogUtil {
|
||||||
|
|
||||||
static Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
|
static Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
|
||||||
|
|
||||||
|
public static boolean isHttpHeaderMode() {
|
||||||
|
return StringUtils.equals(System.getProperty("use.http.header.log", "n"), "y");
|
||||||
|
}
|
||||||
|
|
||||||
public static void insertHttpAdapterExtraLog(String guid, int serviceProcessNumber, String adapterGroupName, String adapterName, Map<Object, Object> headers, String url, String httpMethod){
|
public static void insertHttpAdapterExtraLog(String guid, int serviceProcessNumber, String adapterGroupName, String adapterName, Map<Object, Object> headers, String url, String httpMethod){
|
||||||
insertHttpAdapterExtraLog(guid, serviceProcessNumber, adapterGroupName, adapterName, headers, url, httpMethod, 0);
|
insertHttpAdapterExtraLog(guid, serviceProcessNumber, adapterGroupName, adapterName, headers, url, httpMethod, 0);
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import org.w3c.dom.Document;
|
|||||||
import com.eactive.eai.common.EAIKeys;
|
import com.eactive.eai.common.EAIKeys;
|
||||||
import com.eactive.eai.common.message.MessageType;
|
import com.eactive.eai.common.message.MessageType;
|
||||||
import com.eactive.eai.common.monitor.EAIServiceMonitor;
|
import com.eactive.eai.common.monitor.EAIServiceMonitor;
|
||||||
|
import com.eactive.eai.common.property.PropManager;
|
||||||
import com.eactive.eai.transformer.message.ISO8583Message;
|
import com.eactive.eai.transformer.message.ISO8583Message;
|
||||||
import com.eactive.eai.transformer.message.ISO8583MessageFactory;
|
import com.eactive.eai.transformer.message.ISO8583MessageFactory;
|
||||||
import com.eactive.eai.transformer.util.IConv;
|
import com.eactive.eai.transformer.util.IConv;
|
||||||
@@ -35,7 +36,8 @@ public final class MessageUtil {
|
|||||||
static Logger logger = LoggerFactory.getLogger(MessageUtil.class);
|
static Logger logger = LoggerFactory.getLogger(MessageUtil.class);
|
||||||
|
|
||||||
//public static final String ERROR_MESSAGE_DEFAULT_FORMAT = "{\"error\":{\"code\":\"%s\",\"message\":\"%s\"}}";
|
//public static final String ERROR_MESSAGE_DEFAULT_FORMAT = "{\"error\":{\"code\":\"%s\",\"message\":\"%s\"}}";
|
||||||
public static final String ERROR_MESSAGE_DEFAULT_FORMAT = "{\"code\":\"%s\",\"message\":\"%s\"}";
|
// public static final String ERROR_MESSAGE_DEFAULT_FORMAT = "{\"code\":\"%s\",\"message\":\"%s\"}";
|
||||||
|
public static final String ERROR_MESSAGE_DEFAULT_FORMAT = "{\"error\":\"%s\",\"error_description\":\"%s\"}";
|
||||||
|
|
||||||
public static final String ERROR_CODE_AP_ERROR = "E.GW.AP_ERROR";
|
public static final String ERROR_CODE_AP_ERROR = "E.GW.AP_ERROR";
|
||||||
public static final String ERROR_CODE_AUTH_FAIL = "E.GW.AUTH_FAIL";
|
public static final String ERROR_CODE_AUTH_FAIL = "E.GW.AUTH_FAIL";
|
||||||
@@ -516,7 +518,8 @@ public final class MessageUtil {
|
|||||||
|
|
||||||
public static String makeJsonErrorMessage(String code, String msg, String errorFormat) {
|
public static String makeJsonErrorMessage(String code, String msg, String errorFormat) {
|
||||||
if (StringUtils.isBlank(errorFormat)) {
|
if (StringUtils.isBlank(errorFormat)) {
|
||||||
errorFormat = ERROR_MESSAGE_DEFAULT_FORMAT;
|
errorFormat = PropManager.getInstance().getProperty("MessageUtil",
|
||||||
|
"ERROR_MESSAGE_DEFAULT_FORMAT", ERROR_MESSAGE_DEFAULT_FORMAT);
|
||||||
}
|
}
|
||||||
|
|
||||||
// errorFormat에 %s가 1개만 있으면 msg만, 2개 이상이면 code, msg 전달
|
// errorFormat에 %s가 1개만 있으면 msg만, 2개 이상이면 code, msg 전달
|
||||||
|
|||||||
@@ -427,15 +427,15 @@ public class BaseFCProcess extends Process {
|
|||||||
public void setGUID() throws Exception {
|
public void setGUID() throws Exception {
|
||||||
InterfaceMapper mapper = this.resEaiMsg.getMapper();
|
InterfaceMapper mapper = this.resEaiMsg.getMapper();
|
||||||
StandardMessage standardMessage = this.resEaiMsg.getStandardMessage();
|
StandardMessage standardMessage = this.resEaiMsg.getStandardMessage();
|
||||||
String guid = mapper.getGuid(standardMessage);
|
// String guid = mapper.getGuid(standardMessage);
|
||||||
String guidseq = mapper.getGuidSeq(standardMessage);
|
// String guidseq = mapper.getGuidSeq(standardMessage);
|
||||||
|
//
|
||||||
if (logger.isDebug())
|
// if (logger.isDebug())
|
||||||
logger.debug(guidLogPrefix + " REQ Current GUID [" + guid + "][" + guidseq + "]");
|
// logger.debug(guidLogPrefix + " REQ Current GUID [" + guid + "][" + guidseq + "]");
|
||||||
mapper.nextGuidSeq(standardMessage);
|
// mapper.nextGuidSeq(standardMessage);
|
||||||
guidseq = mapper.getGuidSeq(standardMessage);
|
// guidseq = mapper.getGuidSeq(standardMessage);
|
||||||
if (logger.isDebug())
|
// if (logger.isDebug())
|
||||||
logger.debug(guidLogPrefix + " REQ ADD PATHSEQ GUID [" + guid + "][" + guidseq + "]");
|
// logger.debug(guidLogPrefix + " REQ ADD PATHSEQ GUID [" + guid + "][" + guidseq + "]");
|
||||||
|
|
||||||
String svcTsmtUsgTp = this.reqEaiMsg.getSvcTsmtUsgTp(); // 기동 호출방식
|
String svcTsmtUsgTp = this.reqEaiMsg.getSvcTsmtUsgTp(); // 기동 호출방식
|
||||||
String psvItfTp = this.reqEaiMsg.getCurrentSvcMsg().getPsvItfTp(); // 수동 호출방식
|
String psvItfTp = this.reqEaiMsg.getCurrentSvcMsg().getPsvItfTp(); // 수동 호출방식
|
||||||
|
|||||||
@@ -4,6 +4,9 @@ import java.util.Calendar;
|
|||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
import com.eactive.eai.common.TransactionContextKeys;
|
import com.eactive.eai.common.TransactionContextKeys;
|
||||||
import com.eactive.eai.common.context.ElinkTransactionContext;
|
import com.eactive.eai.common.context.ElinkTransactionContext;
|
||||||
import com.eactive.eai.common.util.*;
|
import com.eactive.eai.common.util.*;
|
||||||
@@ -96,7 +99,9 @@ public class RequestProcessor extends RequestProcessorSupport {
|
|||||||
//isPEAIServer = eaiServerManager.isPEAIServer();
|
//isPEAIServer = eaiServerManager.isPEAIServer();
|
||||||
instid = eaiServerManager.getGroupInstId();
|
instid = eaiServerManager.getGroupInstId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean httpHeaderLogMode = HttpAdapterExtraLogUtil.isHttpHeaderMode();
|
||||||
|
|
||||||
private ProcessVO setVO(Properties prop,long msgRcvTm) throws RequestProcessorException{
|
private ProcessVO setVO(Properties prop,long msgRcvTm) throws RequestProcessorException{
|
||||||
String actionName = prop.getProperty(Processor.REQUEST_ACTION);
|
String actionName = prop.getProperty(Processor.REQUEST_ACTION);
|
||||||
String adapterGroupName = prop.getProperty(Processor.ADAPTER_GROUP_NAME);
|
String adapterGroupName = prop.getProperty(Processor.ADAPTER_GROUP_NAME);
|
||||||
@@ -363,6 +368,9 @@ public class RequestProcessor extends RequestProcessorSupport {
|
|||||||
logUnknownMessage(vo,orgMessage);
|
logUnknownMessage(vo,orgMessage);
|
||||||
throw new RequestProcessorException(vo.getRspErrorMsg());
|
throw new RequestProcessorException(vo.getRspErrorMsg());
|
||||||
}else {
|
}else {
|
||||||
|
// TODO : DJErp - 표준전문의 InterfaceID는 SEND_RECV_DIVISION, IN_EX_DIVISION 포함해야 할지에 따라 결정
|
||||||
|
// mapper.setInterfaceId(standardMessage, eaiSvcCd);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MCI Sync-Async 응답을 대표인터페이스로 구현하기 위해 추가
|
* MCI Sync-Async 응답을 대표인터페이스로 구현하기 위해 추가
|
||||||
* 조건)MCI 거래 && 일반거래 && 응답 거래
|
* 조건)MCI 거래 && 일반거래 && 응답 거래
|
||||||
@@ -422,12 +430,16 @@ public class RequestProcessor extends RequestProcessorSupport {
|
|||||||
|
|
||||||
// INBOUND_HEADER 가 NULL인 경우는 HTTP가 아닌것으로 간주함.
|
// INBOUND_HEADER 가 NULL인 경우는 HTTP가 아닌것으로 간주함.
|
||||||
if(prop.get(HttpClientAdapterServiceKey.INBOUND_HEADER) != null) {
|
if(prop.get(HttpClientAdapterServiceKey.INBOUND_HEADER) != null) {
|
||||||
HttpAdapterExtraLogUtil.insertHttpAdapterExtraLog(vo.getUuid(), 100,
|
if (!httpHeaderLogMode) {
|
||||||
prop.getProperty(HttpClientAdapterServiceKey.ADAPTER_GROUP_NAME),
|
logger.info("httpHeader logging off - use.http.header.log");
|
||||||
prop.getProperty(HttpClientAdapterServiceKey.ADAPTER_NAME),
|
} else {
|
||||||
(Properties) prop.get(HttpClientAdapterServiceKey.INBOUND_HEADER),
|
HttpAdapterExtraLogUtil.insertHttpAdapterExtraLog(vo.getUuid(), 100,
|
||||||
prop.getProperty(HttpClientAdapterServiceKey.INBOUND_EXTURI)+"?"+prop.getProperty(HttpClientAdapterServiceKey.INBOUND_EXTPARAMS),
|
prop.getProperty(HttpClientAdapterServiceKey.ADAPTER_GROUP_NAME),
|
||||||
prop.getProperty(HttpClientAdapterServiceKey.INBOUND_METHOD));
|
prop.getProperty(HttpClientAdapterServiceKey.ADAPTER_NAME),
|
||||||
|
(Properties) prop.get(HttpClientAdapterServiceKey.INBOUND_HEADER),
|
||||||
|
prop.getProperty(HttpClientAdapterServiceKey.INBOUND_EXTURI)+"?"+prop.getProperty(HttpClientAdapterServiceKey.INBOUND_EXTPARAMS),
|
||||||
|
prop.getProperty(HttpClientAdapterServiceKey.INBOUND_METHOD));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EAIMessage eaiMsg = null;
|
EAIMessage eaiMsg = null;
|
||||||
@@ -1292,17 +1304,17 @@ public class RequestProcessor extends RequestProcessorSupport {
|
|||||||
STDMessageKeys.SEND_RECV_CD_SEND.equals(returnType) ) {
|
STDMessageKeys.SEND_RECV_CD_SEND.equals(returnType) ) {
|
||||||
try {
|
try {
|
||||||
retEaiMsg.setLogPssSno(400);
|
retEaiMsg.setLogPssSno(400);
|
||||||
String retGuid = mapper.getGuid(retEaiMsg.getStandardMessage());
|
// String retGuid = mapper.getGuid(retEaiMsg.getStandardMessage());
|
||||||
String retGuidSeq = mapper.getGuidSeq(retEaiMsg.getStandardMessage());
|
// String retGuidSeq = mapper.getGuidSeq(retEaiMsg.getStandardMessage());
|
||||||
String newGuid = retGuid + StringUtils.defaultString(StringUtils.leftPad(retGuidSeq, UUIDGenerator.GUID_SEQ_LENGTH, '0'));
|
// String newGuid = retGuid + StringUtils.defaultString(StringUtils.leftPad(retGuidSeq, UUIDGenerator.GUID_SEQ_LENGTH, '0'));
|
||||||
mapper.setGuid(retEaiMsg.getStandardMessage(), newGuid);
|
// mapper.setGuid(retEaiMsg.getStandardMessage(), newGuid);
|
||||||
mapper.setSendTime(retEaiMsg.getStandardMessage(), DatetimeUtil.getCurrentTimeMillis());
|
mapper.setSendTime(retEaiMsg.getStandardMessage(), DatetimeUtil.getCurrentTimeMillis());
|
||||||
|
|
||||||
EAILogSender.send(retEaiMsg, null);
|
EAILogSender.send(retEaiMsg, null);
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
vo.setRspErrorCode("RECEAIIRP100");
|
vo.setRspErrorCode("RECEAIIRP100");
|
||||||
vo.setRspErrorMsg(ExceptionUtil.make(e, vo.getRspErrorCode(), new String[]{vo.getEaiSvcCd()} ));
|
vo.setRspErrorMsg(ExceptionUtil.make(e, vo.getRspErrorCode(), new String[]{vo.getEaiSvcCd()} ));
|
||||||
if (logger.isError()) logger.error(guidLogPrefix + " : " + vo.getRspErrorMsg());
|
if (logger.isError()) logger.error(guidLogPrefix + " : " + vo.getRspErrorMsg(), e);
|
||||||
}
|
}
|
||||||
if (logger.isInfo()) logger.info(guidLogPrefix + " : LOG(" + eaiMsg.getLogPssSno() + ") EAIMessage : "+eaiMsg.getEAISvcCd());
|
if (logger.isInfo()) logger.info(guidLogPrefix + " : LOG(" + eaiMsg.getLogPssSno() + ") EAIMessage : "+eaiMsg.getEAISvcCd());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -783,12 +783,15 @@ public class StandardItem implements Serializable, Cloneable {
|
|||||||
if(p>0) sb.append(",");
|
if(p>0) sb.append(",");
|
||||||
sb.append("{");
|
sb.append("{");
|
||||||
while(keyIter.hasNext()) {
|
while(keyIter.hasNext()) {
|
||||||
if(ai>0) sb.append(",");
|
|
||||||
String key = keyIter.next();
|
String key = keyIter.next();
|
||||||
StandardItem item = group.get(key);
|
StandardItem item = group.get(key);
|
||||||
if(showPretty) sb.append("\n");
|
String itemPart = item.toJson(showPretty, withBizData);
|
||||||
sb.append(item.toJson(showPretty, withBizData));
|
if(StringUtils.isNotEmpty(itemPart)) {
|
||||||
ai++;
|
if(ai>0) sb.append(",");
|
||||||
|
if(showPretty) sb.append("\n");
|
||||||
|
sb.append(itemPart);
|
||||||
|
ai++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(showPretty) {
|
if(showPretty) {
|
||||||
@@ -1020,20 +1023,15 @@ public class StandardItem implements Serializable, Cloneable {
|
|||||||
totalSize += getLength();
|
totalSize += getLength();
|
||||||
break;
|
break;
|
||||||
case StandardType.GROUP :
|
case StandardType.GROUP :
|
||||||
// skip variable group
|
// skip inactive/conditional group (size==0 means not activated)
|
||||||
if( getSize() == 0
|
if( getSize() == 0 ) {
|
||||||
//카카오뱅크 => 카카오카드 400응답시 아래 로직을 추가해야 전체건수에서 메시지부가 처리됨
|
|
||||||
//메시지부 size 0 refPath refValue 사용 해서 있고 없고 처리
|
|
||||||
&& (StringUtils.isBlank(getRefPath())
|
|
||||||
|| StringUtils.isBlank(getRefValue()))
|
|
||||||
) {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (isHidden) break;
|
if (isHidden) break;
|
||||||
keyIter = childs.keySet().iterator();
|
keyIter = childs.keySet().iterator();
|
||||||
while(keyIter.hasNext()) {
|
while(keyIter.hasNext()) {
|
||||||
String key = keyIter.next();
|
String key = keyIter.next();
|
||||||
StandardItem item = childs.get(key);
|
StandardItem item = childs.get(key);
|
||||||
totalSize +=item.getBytesDataLength(charset);
|
totalSize +=item.getBytesDataLength(charset);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1120,20 +1118,15 @@ public class StandardItem implements Serializable, Cloneable {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case StandardType.GROUP :
|
case StandardType.GROUP :
|
||||||
// skip variable group
|
// skip inactive/conditional group (size==0 means not activated)
|
||||||
if( getSize() == 0
|
if( getSize() == 0 ) {
|
||||||
//카카오뱅크 => 카카오카드 400응답시 아래 로직을 추가해야 전체건수에서 메시지부가 처리됨
|
|
||||||
//메시지부 size 0 refPath refValue 사용 해서 있고 없고 처리
|
|
||||||
&& (StringUtils.isBlank(getRefPath())
|
|
||||||
|| StringUtils.isBlank(getRefValue()))
|
|
||||||
) {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (isHidden) break;
|
if (isHidden) break;
|
||||||
keyIter = childs.keySet().iterator();
|
keyIter = childs.keySet().iterator();
|
||||||
while(keyIter.hasNext()) {
|
while(keyIter.hasNext()) {
|
||||||
String key = keyIter.next();
|
String key = keyIter.next();
|
||||||
StandardItem item = childs.get(key);
|
StandardItem item = childs.get(key);
|
||||||
bos.write(item.toByteArray(withBizData,charset)); //하위로 내려갈때 withBizDat 값이 없어져서 추가 jun's 20231101
|
bos.write(item.toByteArray(withBizData,charset)); //하위로 내려갈때 withBizDat 값이 없어져서 추가 jun's 20231101
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ reader.XML=com.eactive.eai.message.parser.XmlReader
|
|||||||
reader.FLAT=com.eactive.eai.message.parser.FlatReader
|
reader.FLAT=com.eactive.eai.message.parser.FlatReader
|
||||||
*/
|
*/
|
||||||
public static String STANDARD_MESSAGE_CONFIG = "standard.message.config";
|
public static String STANDARD_MESSAGE_CONFIG = "standard.message.config";
|
||||||
private String DEFAULT_CONFIG_PATH = "./resources/standard-message-config.properties";
|
private String DEFAULT_CONFIG_PATH = "./standard-message-config.properties";
|
||||||
private String DEFAULT_CONFIG_FILE = "standard-message-config.properties";
|
private String DEFAULT_CONFIG_FILE = "standard-message-config.properties";
|
||||||
|
|
||||||
private String LAYOUT_FILE_TYPE = "layout.file.type";
|
private String LAYOUT_FILE_TYPE = "layout.file.type";
|
||||||
|
|||||||
@@ -359,10 +359,10 @@ public abstract class DefaultProcess extends Process {
|
|||||||
|
|
||||||
// GUID SET
|
// GUID SET
|
||||||
mapper.nextGuidSeq(standardMessage);
|
mapper.nextGuidSeq(standardMessage);
|
||||||
String guid = mapper.getGuid(standardMessage);
|
// String guid = mapper.getGuid(standardMessage);
|
||||||
String guidSeq = mapper.getGuidSeq(standardMessage);
|
// String guidSeq = mapper.getGuidSeq(standardMessage);
|
||||||
mapper.setGuid(standardMessage,
|
// mapper.setGuid(standardMessage,
|
||||||
guid + StringUtils.defaultString(StringUtils.leftPad(guidSeq, UUIDGenerator.GUID_SEQ_LENGTH, '0')));
|
// guid + StringUtils.defaultString(StringUtils.leftPad(guidSeq, UUIDGenerator.GUID_SEQ_LENGTH, '0')));
|
||||||
|
|
||||||
// 시스템구분
|
// 시스템구분
|
||||||
// stdmsg.setData("stdheader.Inter_chn", EAIServerManager.getInstance().getSystemGubun());
|
// stdmsg.setData("stdheader.Inter_chn", EAIServerManager.getInstance().getSystemGubun());
|
||||||
@@ -776,7 +776,7 @@ public abstract class DefaultProcess extends Process {
|
|||||||
}
|
}
|
||||||
standardMessage.setBizData(this.resObject, this.inboundCharset);
|
standardMessage.setBizData(this.resObject, this.inboundCharset);
|
||||||
try {
|
try {
|
||||||
mapper.nextGuidSeq(standardMessage);
|
//mapper.nextGuidSeq(standardMessage);
|
||||||
mapper.setSendRecvDivision(standardMessage, STDMessageKeys.SEND_RECV_CD_RECV);
|
mapper.setSendRecvDivision(standardMessage, STDMessageKeys.SEND_RECV_CD_RECV);
|
||||||
StandardMessageManager standardManager = StandardMessageManager.getInstance();
|
StandardMessageManager standardManager = StandardMessageManager.getInstance();
|
||||||
standardManager.getMessageCoordinator().coordinateSetStandardMessageError(standardMessage, mapper,
|
standardManager.getMessageCoordinator().coordinateSetStandardMessageError(standardMessage, mapper,
|
||||||
|
|||||||
Reference in New Issue
Block a user