변환 함수 추가
This commit is contained in:
@@ -0,0 +1,70 @@
|
|||||||
|
# 사용자 정의 변환 함수
|
||||||
|
|
||||||
|
## 1. substringrequestmessage
|
||||||
|
|
||||||
|
최초요청데이터를 substring
|
||||||
|
|
||||||
|
| 항목 | 값 |
|
||||||
|
|------|-----|
|
||||||
|
| 변환함수명 | substringrequestmessage |
|
||||||
|
| 변환함수반환유형ID | [2101] STRING |
|
||||||
|
| 변환함수유형ID | [2302] GENERIC |
|
||||||
|
| 변환함수생성클래스 | com.eactive.eai.custom.transformer.function.userdefined.SubStringRequestMessage |
|
||||||
|
|
||||||
|
### 파라미터
|
||||||
|
|
||||||
|
| 일련번호 | 파라미터명 | 유형 | 설명 |
|
||||||
|
|---------|-----------|------|------|
|
||||||
|
| 1 | start | NUMBER | 시작 위치 |
|
||||||
|
| 2 | end | NUMBER | 종료 위치 |
|
||||||
|
|
||||||
|
### 사용 예시
|
||||||
|
|
||||||
|
```
|
||||||
|
substringrequestmessage(AGW_TESTCASE019S1_TGTR.status,3,7)
|
||||||
|
```
|
||||||
|
|
||||||
|
**샘플 메시지:**
|
||||||
|
```
|
||||||
|
ABCDEFGHIJK
|
||||||
|
```
|
||||||
|
|
||||||
|
**예상 결과:**
|
||||||
|
```
|
||||||
|
DEFG
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. jsonpathextractrequestmessage
|
||||||
|
|
||||||
|
최초요청(100)이 JSON 일 경우 특정 PATH의 데이터를 추출 하는 함수
|
||||||
|
|
||||||
|
| 항목 | 값 |
|
||||||
|
|------|-----|
|
||||||
|
| 변환함수명 | jsonpathextractrequestmessage |
|
||||||
|
| 변환함수반환유형ID | [2116] OBJECT |
|
||||||
|
| 변환함수유형ID | [2302] GENERIC |
|
||||||
|
| 변환함수생성클래스 | com.eactive.eai.custom.transformer.function.userdefined.JsonPathExtractRequestMessage |
|
||||||
|
|
||||||
|
### 파라미터
|
||||||
|
|
||||||
|
| 일련번호 | 파라미터명 | 유형 | 설명 |
|
||||||
|
|---------|-----------|------|------|
|
||||||
|
| 1 | jsonPath | STRING | 대상 PATH |
|
||||||
|
|
||||||
|
### 사용 예시
|
||||||
|
|
||||||
|
```
|
||||||
|
jsonpathextractrequestmessage(AGW_TESTCASE022S1_TGTR.transactionId,"$.group1.field2")
|
||||||
|
```
|
||||||
|
|
||||||
|
**샘플 메시지:**
|
||||||
|
```json
|
||||||
|
{"group1":{"field1":"value1","field2":"value2"},"field3":"value3"}
|
||||||
|
```
|
||||||
|
|
||||||
|
**예상 결과:**
|
||||||
|
```
|
||||||
|
value2
|
||||||
|
```
|
||||||
+74
@@ -0,0 +1,74 @@
|
|||||||
|
package com.eactive.eai.custom.transformer.function.userdefined;
|
||||||
|
|
||||||
|
import com.eactive.eai.common.context.ElinkTransactionContext;
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.jayway.jsonpath.Configuration;
|
||||||
|
import com.jayway.jsonpath.JsonPath;
|
||||||
|
import com.jayway.jsonpath.spi.json.JacksonJsonNodeJsonProvider;
|
||||||
|
import com.jayway.jsonpath.spi.json.JacksonJsonProvider;
|
||||||
|
import org.nfunk.jep.ParseException;
|
||||||
|
import org.nfunk.jep.function.PostfixMathCommand;
|
||||||
|
|
||||||
|
import java.util.Stack;
|
||||||
|
|
||||||
|
public class JsonPathExtractRequestMessage extends PostfixMathCommand {
|
||||||
|
|
||||||
|
private static final ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
|
||||||
|
public JsonPathExtractRequestMessage() {
|
||||||
|
numberOfParameters = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run(Stack inStack) throws ParseException {
|
||||||
|
checkStack(inStack);
|
||||||
|
|
||||||
|
String bizData = ElinkTransactionContext.getRequestBizData();
|
||||||
|
|
||||||
|
Object p1 = inStack.pop();
|
||||||
|
String path = String.valueOf(p1);
|
||||||
|
|
||||||
|
inStack.clear();
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Jackson을 JsonPath의 JSON 프로바이더로 설정
|
||||||
|
Configuration config = Configuration.builder()
|
||||||
|
.jsonProvider(new JacksonJsonNodeJsonProvider())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
JsonNode resultNode = JsonPath.using(config).parse(bizData).read(path);
|
||||||
|
|
||||||
|
if (resultNode == null) {
|
||||||
|
inStack.push(null);
|
||||||
|
} else if (resultNode.isValueNode()) {
|
||||||
|
// 단순 값(문자열, 숫자, boolean 등)은 텍스트로 반환
|
||||||
|
inStack.push(resultNode.asText());
|
||||||
|
} else {
|
||||||
|
// 객체/배열은 JsonNode 그대로 반환
|
||||||
|
inStack.push(resultNode);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new ParseException("JsonPath extract error: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private JsonNode getNodeAtPath(JsonNode rootNode, String path) {
|
||||||
|
String[] tokens = path.split("/");
|
||||||
|
JsonNode currentNode = rootNode;
|
||||||
|
|
||||||
|
for (String token : tokens) {
|
||||||
|
if (token.isEmpty()) continue;
|
||||||
|
|
||||||
|
if (token.matches("\\d+")) {
|
||||||
|
currentNode = currentNode.get(Integer.parseInt(token));
|
||||||
|
} else {
|
||||||
|
currentNode = currentNode.get(token);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentNode == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return currentNode;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user