This is an automated email from the ASF dual-hosted git repository.
lidongdai pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new 8f8ddae Using Jackson instead of Fastjson (#2850)
8f8ddae is described below
commit 8f8ddae03098b60f0c4f1637c1e3b5670df18b70
Author: Han Gao <[email protected]>
AuthorDate: Sun May 31 18:11:10 2020 +0800
Using Jackson instead of Fastjson (#2850)
* Using Jackson instead of Fastjson
* Fix some json bugs
Co-authored-by: dailidong <[email protected]>
---
.../alert/utils/JSONUtilsTest.java | 2 +
.../api/service/ProcessDefinitionService.java | 405 +++++++++++----------
.../api/service/ProcessInstanceService.java | 5 +-
.../api/utils/exportprocess/DataSourceParam.java | 21 +-
.../api/utils/exportprocess/DependentParam.java | 40 +-
.../utils/exportprocess/ProcessAddTaskParam.java | 6 +-
.../api/service/ProcessDefinitionServiceTest.java | 8 +-
.../utils/exportprocess/DataSourceParamTest.java | 19 +-
.../utils/exportprocess/DependentParamTest.java | 34 +-
.../dolphinscheduler/common/utils/JSONUtils.java | 388 ++++++++++----------
.../common/utils/ParameterUtils.java | 2 +-
.../dolphinscheduler/common/utils/StreamUtils.java | 33 +-
.../common/utils/JSONUtilsTest.java | 36 +-
.../common/utils/ParameterUtilsTest.java | 8 +-
.../common/utils/StreamUtilsTest.java | 38 +-
15 files changed, 548 insertions(+), 497 deletions(-)
diff --git
a/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/JSONUtilsTest.java
b/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/JSONUtilsTest.java
index a151abc..843bcf4 100644
---
a/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/JSONUtilsTest.java
+++
b/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/JSONUtilsTest.java
@@ -17,6 +17,7 @@
package org.apache.dolphinscheduler.alert.utils;
+import com.fasterxml.jackson.databind.JsonNode;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
@@ -109,4 +110,5 @@ public class JSONUtilsTest {
}
+
}
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
index 6921321..cbf432d 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
@@ -17,11 +17,12 @@
package org.apache.dolphinscheduler.api.service;
import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.dolphinscheduler.api.dto.ProcessMeta;
import org.apache.dolphinscheduler.api.dto.treeview.Instance;
import org.apache.dolphinscheduler.api.dto.treeview.TreeViewDto;
@@ -73,6 +74,11 @@ public class ProcessDefinitionService extends BaseDAGService
{
private static final Logger logger =
LoggerFactory.getLogger(ProcessDefinitionService.class);
+ private static final String PROCESSDEFINITIONID = "processDefinitionId";
+
+ private static final String RELEASESTATE = "releaseState";
+
+ private static final String TASKS = "tasks";
@Autowired
private ProjectMapper projectMapper;
@@ -99,13 +105,13 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* create process definition
*
- * @param loginUser login user
- * @param projectName project name
- * @param name process definition name
+ * @param loginUser login user
+ * @param projectName project name
+ * @param name process definition name
* @param processDefinitionJson process definition json
- * @param desc description
- * @param locations locations for nodes
- * @param connects connects for nodes
+ * @param desc description
+ * @param locations locations for nodes
+ * @param connects connects for nodes
* @return create result code
* @throws JsonProcessingException JsonProcessingException
*/
@@ -163,29 +169,30 @@ public class ProcessDefinitionService extends
BaseDAGService {
// return processDefinition object with ID
result.put(Constants.DATA_LIST,
processDefineMapper.selectById(processDefine.getId()));
putMsg(result, Status.SUCCESS);
- result.put("processDefinitionId",processDefine.getId());
+ result.put("processDefinitionId", processDefine.getId());
return result;
}
/**
* get resource ids
+ *
* @param processData process data
* @return resource ids
*/
private String getResourceIds(ProcessData processData) {
List<TaskNode> tasks = processData.getTasks();
Set<Integer> resourceIds = new HashSet<>();
- for(TaskNode taskNode : tasks){
+ for (TaskNode taskNode : tasks) {
String taskParameter = taskNode.getParams();
- AbstractParameters params =
TaskParametersUtils.getParameters(taskNode.getType(),taskParameter);
+ AbstractParameters params =
TaskParametersUtils.getParameters(taskNode.getType(), taskParameter);
if (CollectionUtils.isNotEmpty(params.getResourceFilesList())) {
- Set<Integer> tempSet =
params.getResourceFilesList().stream().map(t->t.getId()).collect(Collectors.toSet());
+ Set<Integer> tempSet =
params.getResourceFilesList().stream().map(t ->
t.getId()).collect(Collectors.toSet());
resourceIds.addAll(tempSet);
}
}
StringBuilder sb = new StringBuilder();
- for(int i : resourceIds) {
+ for (int i : resourceIds) {
if (sb.length() > 0) {
sb.append(",");
}
@@ -198,7 +205,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* query process definition list
*
- * @param loginUser login user
+ * @param loginUser login user
* @param projectName project name
* @return definition list
*/
@@ -224,12 +231,12 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* query process definition list paging
*
- * @param loginUser login user
+ * @param loginUser login user
* @param projectName project name
- * @param searchVal search value
- * @param pageNo page number
- * @param pageSize page size
- * @param userId user id
+ * @param searchVal search value
+ * @param pageNo page number
+ * @param pageSize page size
+ * @param userId user id
* @return process definition page
*/
public Map<String, Object> queryProcessDefinitionListPaging(User
loginUser, String projectName, String searchVal, Integer pageNo, Integer
pageSize, Integer userId) {
@@ -245,10 +252,10 @@ public class ProcessDefinitionService extends
BaseDAGService {
Page<ProcessDefinition> page = new Page(pageNo, pageSize);
IPage<ProcessDefinition> processDefinitionIPage =
processDefineMapper.queryDefineListPaging(
- page, searchVal, userId, project.getId(),isAdmin(loginUser));
+ page, searchVal, userId, project.getId(), isAdmin(loginUser));
PageInfo pageInfo = new PageInfo<ProcessData>(pageNo, pageSize);
- pageInfo.setTotalCount((int)processDefinitionIPage.getTotal());
+ pageInfo.setTotalCount((int) processDefinitionIPage.getTotal());
pageInfo.setLists(processDefinitionIPage.getRecords());
result.put(Constants.DATA_LIST, pageInfo);
putMsg(result, Status.SUCCESS);
@@ -259,9 +266,9 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* query datail of process definition
*
- * @param loginUser login user
+ * @param loginUser login user
* @param projectName project name
- * @param processId process definition id
+ * @param processId process definition id
* @return process definition detail
*/
public Map<String, Object> queryProcessDefinitionById(User loginUser,
String projectName, Integer processId) {
@@ -289,12 +296,12 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* copy process definition
*
- * @param loginUser login user
+ * @param loginUser login user
* @param projectName project name
- * @param processId process definition id
+ * @param processId process definition id
* @return copy result code
*/
- public Map<String, Object> copyProcessDefinition(User loginUser, String
projectName, Integer processId) throws JsonProcessingException{
+ public Map<String, Object> copyProcessDefinition(User loginUser, String
projectName, Integer processId) throws JsonProcessingException {
Map<String, Object> result = new HashMap<>(5);
Project project = projectMapper.queryByName(projectName);
@@ -313,7 +320,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
return createProcessDefinition(
loginUser,
projectName,
-
processDefinition.getName()+"_copy_"+System.currentTimeMillis(),
+ processDefinition.getName() + "_copy_" +
System.currentTimeMillis(),
processDefinition.getProcessDefinitionJson(),
processDefinition.getDescription(),
processDefinition.getLocations(),
@@ -324,14 +331,14 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* update process definition
*
- * @param loginUser login user
- * @param projectName project name
- * @param name process definition name
- * @param id process definition id
+ * @param loginUser login user
+ * @param projectName project name
+ * @param name process definition name
+ * @param id process definition id
* @param processDefinitionJson process definition json
- * @param desc description
- * @param locations locations for nodes
- * @param connects connects for nodes
+ * @param desc description
+ * @param locations locations for nodes
+ * @param connects connects for nodes
* @return update result code
*/
public Map<String, Object> updateProcessDefinition(User loginUser, String
projectName, int id, String name,
@@ -400,9 +407,9 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* verify process definition name unique
*
- * @param loginUser login user
+ * @param loginUser login user
* @param projectName project name
- * @param name name
+ * @param name name
* @return true if process definition name not exists, otherwise false
*/
public Map<String, Object> verifyProcessDefinitionName(User loginUser,
String projectName, String name) {
@@ -427,8 +434,8 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* delete process definition by id
*
- * @param loginUser login user
- * @param projectName project name
+ * @param loginUser login user
+ * @param projectName project name
* @param processDefinitionId process definition id
* @return delete result code
*/
@@ -459,22 +466,22 @@ public class ProcessDefinitionService extends
BaseDAGService {
// check process definition is already online
if (processDefinition.getReleaseState() == ReleaseState.ONLINE) {
- putMsg(result,
Status.PROCESS_DEFINE_STATE_ONLINE,processDefinitionId);
+ putMsg(result, Status.PROCESS_DEFINE_STATE_ONLINE,
processDefinitionId);
return result;
}
// get the timing according to the process definition
List<Schedule> schedules =
scheduleMapper.queryByProcessDefinitionId(processDefinitionId);
if (!schedules.isEmpty() && schedules.size() > 1) {
- logger.warn("scheduler num is {},Greater than 1",schedules.size());
+ logger.warn("scheduler num is {},Greater than 1",
schedules.size());
putMsg(result, Status.DELETE_PROCESS_DEFINE_BY_ID_ERROR);
return result;
- }else if(schedules.size() == 1){
+ } else if (schedules.size() == 1) {
Schedule schedule = schedules.get(0);
- if(schedule.getReleaseState() == ReleaseState.OFFLINE){
+ if (schedule.getReleaseState() == ReleaseState.OFFLINE) {
scheduleMapper.deleteById(schedule.getId());
- }else if(schedule.getReleaseState() == ReleaseState.ONLINE){
- putMsg(result,
Status.SCHEDULE_CRON_STATE_ONLINE,schedule.getId());
+ } else if (schedule.getReleaseState() == ReleaseState.ONLINE) {
+ putMsg(result, Status.SCHEDULE_CRON_STATE_ONLINE,
schedule.getId());
return result;
}
}
@@ -492,9 +499,9 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* release process definition: online / offline
*
- * @param loginUser login user
- * @param projectName project name
- * @param id process definition id
+ * @param loginUser login user
+ * @param projectName project name
+ * @param id process definition id
* @param releaseState release state
* @return release result code
*/
@@ -513,7 +520,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
// check state
if (null == state) {
- putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR,
"releaseState");
+ putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR,
RELEASESTATE);
return result;
}
@@ -525,12 +532,12 @@ public class ProcessDefinitionService extends
BaseDAGService {
String resourceIds = processDefinition.getResourceIds();
if (StringUtils.isNotBlank(resourceIds)) {
Integer[] resourceIdArray =
Arrays.stream(resourceIds.split(",")).map(Integer::parseInt).toArray(Integer[]::new);
- PermissionCheck<Integer> permissionCheck = new
PermissionCheck(AuthorizationType.RESOURCE_FILE_ID,processService,resourceIdArray,loginUser.getId(),logger);
+ PermissionCheck<Integer> permissionCheck = new
PermissionCheck<>(AuthorizationType.RESOURCE_FILE_ID, processService,
resourceIdArray, loginUser.getId(), logger);
try {
permissionCheck.checkPermission();
} catch (Exception e) {
- logger.error(e.getMessage(),e);
- putMsg(result,
Status.RESOURCE_NOT_EXIST_OR_NO_PERMISSION, "releaseState");
+ logger.error(e.getMessage(), e);
+ putMsg(result,
Status.RESOURCE_NOT_EXIST_OR_NO_PERMISSION, RELEASESTATE);
return result;
}
}
@@ -545,7 +552,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
new int[]{processDefinition.getId()}
);
- for(Schedule schedule:scheduleList){
+ for (Schedule schedule : scheduleList) {
logger.info("set schedule offline, project id: {},
schedule id: {}, process definition id: {}", project.getId(), schedule.getId(),
id);
// set status
schedule.setReleaseState(ReleaseState.OFFLINE);
@@ -554,7 +561,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
}
break;
default:
- putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR,
"releaseState");
+ putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR,
RELEASESTATE);
return result;
}
@@ -564,14 +571,15 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* batch export process definition by ids
+ *
* @param loginUser
* @param projectName
* @param processDefinitionIds
* @param response
*/
- public void batchExportProcessDefinitionByIds(User loginUser, String
projectName, String processDefinitionIds, HttpServletResponse response){
+ public void batchExportProcessDefinitionByIds(User loginUser, String
projectName, String processDefinitionIds, HttpServletResponse response) {
- if(StringUtils.isEmpty(processDefinitionIds)){
+ if (StringUtils.isEmpty(processDefinitionIds)) {
return;
}
@@ -582,24 +590,25 @@ public class ProcessDefinitionService extends
BaseDAGService {
Map<String, Object> checkResult =
projectService.checkProjectAndAuth(loginUser, project, projectName);
Status resultStatus = (Status) checkResult.get(Constants.STATUS);
- if(resultStatus != Status.SUCCESS){
+ if (resultStatus != Status.SUCCESS) {
return;
}
List<ProcessMeta> processDefinitionList =
getProcessDefinitionList(processDefinitionIds);
- if(CollectionUtils.isNotEmpty(processDefinitionList)){
+ if (CollectionUtils.isNotEmpty(processDefinitionList)) {
downloadProcessDefinitionFile(response, processDefinitionList);
}
}
/**
* get process definition list by ids
+ *
* @param processDefinitionIds
* @return
*/
- private List<ProcessMeta> getProcessDefinitionList(String
processDefinitionIds){
+ private List<ProcessMeta> getProcessDefinitionList(String
processDefinitionIds) {
List<ProcessMeta> processDefinitionList = new ArrayList<>();
String[] processDefinitionIdArray = processDefinitionIds.split(",");
for (String strProcessDefinitionId : processDefinitionIdArray) {
@@ -616,6 +625,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* download the process definition file
+ *
* @param response
* @param processDefinitionList
*/
@@ -631,7 +641,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
buff.close();
} catch (IOException e) {
logger.warn("export process fail", e);
- }finally {
+ } finally {
if (null != buff) {
try {
buff.close();
@@ -651,19 +661,21 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* get export process metadata string
+ *
* @param processDefinitionId process definition id
- * @param processDefinition process definition
+ * @param processDefinition process definition
* @return export process metadata string
*/
public String exportProcessMetaDataStr(Integer processDefinitionId,
ProcessDefinition processDefinition) {
//create workflow json file
- return
JSONUtils.toJsonString(exportProcessMetaData(processDefinitionId,processDefinition));
+ return
JSONUtils.toJsonString(exportProcessMetaData(processDefinitionId,
processDefinition));
}
/**
* get export process metadata string
+ *
* @param processDefinitionId process definition id
- * @param processDefinition process definition
+ * @param processDefinition process definition
* @return export process metadata string
*/
public ProcessMeta exportProcessMetaData(Integer processDefinitionId,
ProcessDefinition processDefinition) {
@@ -699,17 +711,18 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* correct task param which has datasource or dependent
+ *
* @param processDefinitionJson processDefinitionJson
* @return correct processDefinitionJson
*/
public String addExportTaskNodeSpecialParam(String processDefinitionJson) {
- JSONObject jsonObject = JSONUtils.parseObject(processDefinitionJson);
- JSONArray jsonArray = (JSONArray) jsonObject.get("tasks");
+ ObjectNode jsonObject = JSONUtils.parseObject(processDefinitionJson);
+ ArrayNode jsonArray = (ArrayNode) jsonObject.path(TASKS);
for (int i = 0; i < jsonArray.size(); i++) {
- JSONObject taskNode = jsonArray.getJSONObject(i);
- if (StringUtils.isNotEmpty(taskNode.getString("type"))) {
- String taskType = taskNode.getString("type");
+ JsonNode taskNode = jsonArray.path(i);
+ if (StringUtils.isNotEmpty(taskNode.path("type").asText())) {
+ String taskType = taskNode.path("type").asText();
ProcessAddTaskParam addTaskParam =
TaskNodeParamFactory.getByTaskType(taskType);
if (null != addTaskParam) {
@@ -717,12 +730,13 @@ public class ProcessDefinitionService extends
BaseDAGService {
}
}
}
- jsonObject.put("tasks", jsonArray);
+ jsonObject.set(TASKS, jsonArray);
return jsonObject.toString();
}
/**
* check task if has sub process
+ *
* @param taskType task type
* @return if task has sub process return true else false
*/
@@ -732,8 +746,9 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* import process definition
- * @param loginUser login user
- * @param file process metadata json file
+ *
+ * @param loginUser login user
+ * @param file process metadata json file
* @param currentProjectName current project name
* @return import process
*/
@@ -741,7 +756,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
public Map<String, Object> importProcessDefinition(User loginUser,
MultipartFile file, String currentProjectName) {
Map<String, Object> result = new HashMap<>(5);
String processMetaJson = FileUtils.file2String(file);
- List<ProcessMeta> processMetaList =
JSON.parseArray(processMetaJson,ProcessMeta.class);
+ List<ProcessMeta> processMetaList = JSON.parseArray(processMetaJson,
ProcessMeta.class);
//check file content
if (CollectionUtils.isEmpty(processMetaList)) {
@@ -749,9 +764,9 @@ public class ProcessDefinitionService extends
BaseDAGService {
return result;
}
- for(ProcessMeta processMeta:processMetaList){
+ for (ProcessMeta processMeta : processMetaList) {
- if (!checkAndImportProcessDefinition(loginUser,
currentProjectName, result, processMeta)){
+ if (!checkAndImportProcessDefinition(loginUser,
currentProjectName, result, processMeta)) {
return result;
}
}
@@ -761,6 +776,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* check and import process definition
+ *
* @param loginUser
* @param currentProjectName
* @param result
@@ -769,7 +785,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
*/
private boolean checkAndImportProcessDefinition(User loginUser, String
currentProjectName, Map<String, Object> result, ProcessMeta processMeta) {
- if(!checkImportanceParams(processMeta,result)){
+ if (!checkImportanceParams(processMeta, result)) {
return false;
}
@@ -777,7 +793,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
String processDefinitionName = processMeta.getProcessDefinitionName();
//use currentProjectName to query
Project targetProject = projectMapper.queryByName(currentProjectName);
- if(null != targetProject){
+ if (null != targetProject) {
processDefinitionName =
recursionProcessDefinitionName(targetProject.getId(),
processDefinitionName, 1);
}
@@ -801,14 +817,14 @@ public class ProcessDefinitionService extends
BaseDAGService {
processDefinitionName,
addImportTaskNodeParam(loginUser,
processMeta.getProcessDefinitionJson(), targetProject));
- if(createProcessResult == null){
+ if (createProcessResult == null) {
return false;
}
//create process definition
Integer processDefinitionId =
- Objects.isNull(createProcessResult.get("processDefinitionId"))?
-
null:Integer.parseInt(createProcessResult.get("processDefinitionId").toString());
+ Objects.isNull(createProcessResult.get(PROCESSDEFINITIONID)) ?
+ null :
Integer.parseInt(createProcessResult.get(PROCESSDEFINITIONID).toString());
//scheduler param
return getImportProcessScheduleResult(loginUser,
@@ -822,6 +838,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* get create process result
+ *
* @param loginUser
* @param currentProjectName
* @param result
@@ -835,12 +852,12 @@ public class ProcessDefinitionService extends
BaseDAGService {
Map<String, Object>
result,
ProcessMeta processMeta,
String
processDefinitionName,
- String
importProcessParam){
+ String
importProcessParam) {
Map<String, Object> createProcessResult = null;
try {
createProcessResult = createProcessDefinition(loginUser
- ,currentProjectName,
-
processDefinitionName+"_import_"+System.currentTimeMillis(),
+ , currentProjectName,
+ processDefinitionName + "_import_" +
System.currentTimeMillis(),
importProcessParam,
processMeta.getProcessDefinitionDescription(),
processMeta.getProcessDefinitionLocations(),
@@ -856,6 +873,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* get import process schedule result
+ *
* @param loginUser
* @param currentProjectName
* @param result
@@ -887,11 +905,12 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* check importance params
+ *
* @param processMeta
* @param result
* @return
*/
- private boolean checkImportanceParams(ProcessMeta processMeta,Map<String,
Object> result){
+ private boolean checkImportanceParams(ProcessMeta processMeta, Map<String,
Object> result) {
if (StringUtils.isEmpty(processMeta.getProjectName())) {
putMsg(result, Status.DATA_IS_NULL, "projectName");
return false;
@@ -910,18 +929,19 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* import process add special task param
- * @param loginUser login user
+ *
+ * @param loginUser login user
* @param processDefinitionJson process definition json
- * @param targetProject target project
+ * @param targetProject target project
* @return import process param
*/
private String addImportTaskNodeParam(User loginUser, String
processDefinitionJson, Project targetProject) {
- JSONObject jsonObject = JSONUtils.parseObject(processDefinitionJson);
- JSONArray jsonArray = (JSONArray) jsonObject.get("tasks");
+ ObjectNode jsonObject = JSONUtils.parseObject(processDefinitionJson);
+ ArrayNode jsonArray = (ArrayNode) jsonObject.get(TASKS);
//add sql and dependent param
for (int i = 0; i < jsonArray.size(); i++) {
- JSONObject taskNode = jsonArray.getJSONObject(i);
- String taskType = taskNode.getString("type");
+ JsonNode taskNode = jsonArray.path(i);
+ String taskType = taskNode.path("type").asText();
ProcessAddTaskParam addTaskParam =
TaskNodeParamFactory.getByTaskType(taskType);
if (null != addTaskParam) {
addTaskParam.addImportSpecialParam(taskNode);
@@ -931,25 +951,26 @@ public class ProcessDefinitionService extends
BaseDAGService {
//recursive sub-process parameter correction map key for old process
id value for new process id
Map<Integer, Integer> subProcessIdMap = new HashMap<>(20);
- List<Object> subProcessList = jsonArray.stream()
- .filter(elem ->
checkTaskHasSubProcess(JSONUtils.parseObject(elem.toString()).getString("type")))
+ List<Object> subProcessList =
StreamUtils.asStream(jsonArray.elements())
+ .filter(elem ->
checkTaskHasSubProcess(JSONUtils.parseObject(elem.toString()).path("type").asText()))
.collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(subProcessList)) {
importSubProcess(loginUser, targetProject, jsonArray,
subProcessIdMap);
}
- jsonObject.put("tasks", jsonArray);
+ jsonObject.set(TASKS, jsonArray);
return jsonObject.toString();
}
/**
* import process schedule
- * @param loginUser login user
- * @param currentProjectName current project name
- * @param processMeta process meta data
+ *
+ * @param loginUser login user
+ * @param currentProjectName current project name
+ * @param processMeta process meta data
* @param processDefinitionName process definition name
- * @param processDefinitionId process definition id
+ * @param processDefinitionId process definition id
* @return insert schedule flag
*/
public int importProcessSchedule(User loginUser, String
currentProjectName, ProcessMeta processMeta,
@@ -998,84 +1019,87 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* check import process has sub process
* recursion create sub process
- * @param loginUser login user
- * @param targetProject target project
- * @param jsonArray process task array
+ *
+ * @param loginUser login user
+ * @param targetProject target project
+ * @param jsonArray process task array
* @param subProcessIdMap correct sub process id map
*/
- public void importSubProcess(User loginUser, Project targetProject,
JSONArray jsonArray, Map<Integer, Integer> subProcessIdMap) {
+ public void importSubProcess(User loginUser, Project targetProject,
ArrayNode jsonArray, Map<Integer, Integer> subProcessIdMap) {
for (int i = 0; i < jsonArray.size(); i++) {
- JSONObject taskNode = jsonArray.getJSONObject(i);
- String taskType = taskNode.getString("type");
-
- if (checkTaskHasSubProcess(taskType)) {
- //get sub process info
- JSONObject subParams =
JSONUtils.parseObject(taskNode.getString("params"));
- Integer subProcessId =
subParams.getInteger("processDefinitionId");
- ProcessDefinition subProcess =
processDefineMapper.queryByDefineId(subProcessId);
- //check is sub process exist in db
- if (null != subProcess) {
- String subProcessJson =
subProcess.getProcessDefinitionJson();
- //check current project has sub process
- ProcessDefinition currentProjectSubProcess =
processDefineMapper.queryByDefineName(targetProject.getId(),
subProcess.getName());
-
- if (null == currentProjectSubProcess) {
- JSONArray subJsonArray = (JSONArray)
JSONUtils.parseObject(subProcess.getProcessDefinitionJson()).get("tasks");
-
- List<Object> subProcessList = subJsonArray.stream()
- .filter(item ->
checkTaskHasSubProcess(JSONUtils.parseObject(item.toString()).getString("type")))
- .collect(Collectors.toList());
-
- if (CollectionUtils.isNotEmpty(subProcessList)) {
- importSubProcess(loginUser, targetProject,
subJsonArray, subProcessIdMap);
- //sub process processId correct
- if (!subProcessIdMap.isEmpty()) {
-
- for (Map.Entry<Integer, Integer> entry :
subProcessIdMap.entrySet()) {
- String oldSubProcessId =
"\"processDefinitionId\":" + entry.getKey();
- String newSubProcessId =
"\"processDefinitionId\":" + entry.getValue();
- subProcessJson =
subProcessJson.replaceAll(oldSubProcessId, newSubProcessId);
- }
-
- subProcessIdMap.clear();
- }
- }
+ ObjectNode taskNode = (ObjectNode) jsonArray.path(i);
+ String taskType = taskNode.path("type").asText();
- //if sub-process recursion
- Date now = new Date();
- //create sub process in target project
- ProcessDefinition processDefine = new
ProcessDefinition();
- processDefine.setName(subProcess.getName());
- processDefine.setVersion(subProcess.getVersion());
-
processDefine.setReleaseState(subProcess.getReleaseState());
- processDefine.setProjectId(targetProject.getId());
- processDefine.setUserId(loginUser.getId());
- processDefine.setProcessDefinitionJson(subProcessJson);
-
processDefine.setDescription(subProcess.getDescription());
- processDefine.setLocations(subProcess.getLocations());
- processDefine.setConnects(subProcess.getConnects());
- processDefine.setTimeout(subProcess.getTimeout());
- processDefine.setTenantId(subProcess.getTenantId());
-
processDefine.setGlobalParams(subProcess.getGlobalParams());
- processDefine.setCreateTime(now);
- processDefine.setUpdateTime(now);
- processDefine.setFlag(subProcess.getFlag());
- processDefine.setReceivers(subProcess.getReceivers());
-
processDefine.setReceiversCc(subProcess.getReceiversCc());
- processDefineMapper.insert(processDefine);
-
- logger.info("create sub process, project: {}, process
name: {}", targetProject.getName(), processDefine.getName());
-
- //modify task node
- ProcessDefinition newSubProcessDefine =
processDefineMapper.queryByDefineName(processDefine.getProjectId(),processDefine.getName());
-
- if (null != newSubProcessDefine) {
- subProcessIdMap.put(subProcessId,
newSubProcessDefine.getId());
- subParams.put("processDefinitionId",
newSubProcessDefine.getId());
- taskNode.put("params", subParams);
+ if (!checkTaskHasSubProcess(taskType)) {
+ continue;
+ }
+ //get sub process info
+ ObjectNode subParams = (ObjectNode) taskNode.path("params");
+ Integer subProcessId = subParams.path(PROCESSDEFINITIONID).asInt();
+ ProcessDefinition subProcess =
processDefineMapper.queryByDefineId(subProcessId);
+ //check is sub process exist in db
+ if (null == subProcess) {
+ continue;
+ }
+ String subProcessJson = subProcess.getProcessDefinitionJson();
+ //check current project has sub process
+ ProcessDefinition currentProjectSubProcess =
processDefineMapper.queryByDefineName(targetProject.getId(),
subProcess.getName());
+
+ if (null == currentProjectSubProcess) {
+ ArrayNode subJsonArray = (ArrayNode)
JSONUtils.parseObject(subProcess.getProcessDefinitionJson()).get(TASKS);
+
+ List<Object> subProcessList =
StreamUtils.asStream(subJsonArray.elements())
+ .filter(item ->
checkTaskHasSubProcess(JSONUtils.parseObject(item.toString()).path("type").asText()))
+ .collect(Collectors.toList());
+
+ if (CollectionUtils.isNotEmpty(subProcessList)) {
+ importSubProcess(loginUser, targetProject, subJsonArray,
subProcessIdMap);
+ //sub process processId correct
+ if (!subProcessIdMap.isEmpty()) {
+
+ for (Map.Entry<Integer, Integer> entry :
subProcessIdMap.entrySet()) {
+ String oldSubProcessId =
"\"processDefinitionId\":" + entry.getKey();
+ String newSubProcessId =
"\"processDefinitionId\":" + entry.getValue();
+ subProcessJson =
subProcessJson.replaceAll(oldSubProcessId, newSubProcessId);
}
+
+ subProcessIdMap.clear();
}
}
+
+ //if sub-process recursion
+ Date now = new Date();
+ //create sub process in target project
+ ProcessDefinition processDefine = new ProcessDefinition();
+ processDefine.setName(subProcess.getName());
+ processDefine.setVersion(subProcess.getVersion());
+ processDefine.setReleaseState(subProcess.getReleaseState());
+ processDefine.setProjectId(targetProject.getId());
+ processDefine.setUserId(loginUser.getId());
+ processDefine.setProcessDefinitionJson(subProcessJson);
+ processDefine.setDescription(subProcess.getDescription());
+ processDefine.setLocations(subProcess.getLocations());
+ processDefine.setConnects(subProcess.getConnects());
+ processDefine.setTimeout(subProcess.getTimeout());
+ processDefine.setTenantId(subProcess.getTenantId());
+ processDefine.setGlobalParams(subProcess.getGlobalParams());
+ processDefine.setCreateTime(now);
+ processDefine.setUpdateTime(now);
+ processDefine.setFlag(subProcess.getFlag());
+ processDefine.setReceivers(subProcess.getReceivers());
+ processDefine.setReceiversCc(subProcess.getReceiversCc());
+ processDefineMapper.insert(processDefine);
+
+ logger.info("create sub process, project: {}, process name:
{}", targetProject.getName(), processDefine.getName());
+
+ //modify task node
+ ProcessDefinition newSubProcessDefine =
processDefineMapper.queryByDefineName(processDefine.getProjectId(),
processDefine.getName());
+
+ if (null != newSubProcessDefine) {
+ subProcessIdMap.put(subProcessId,
newSubProcessDefine.getId());
+ subParams.put(PROCESSDEFINITIONID,
newSubProcessDefine.getId());
+ taskNode.set("params", subParams);
+ }
}
}
}
@@ -1084,7 +1108,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
/**
* check the process definition node meets the specifications
*
- * @param processData process data
+ * @param processData process data
* @param processDefinitionJson process definition json
* @return check result code
*/
@@ -1094,7 +1118,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
try {
if (processData == null) {
logger.error("process data is null");
- putMsg(result,Status.DATA_IS_NOT_VALID, processDefinitionJson);
+ putMsg(result, Status.DATA_IS_NOT_VALID,
processDefinitionJson);
return result;
}
@@ -1125,7 +1149,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
// check extra params
CheckUtils.checkOtherParams(taskNode.getExtras());
}
- putMsg(result,Status.SUCCESS);
+ putMsg(result, Status.SUCCESS);
} catch (Exception e) {
result.put(Constants.STATUS,
Status.REQUEST_PARAMS_NOT_VALID_ERROR);
result.put(Constants.MSG, e.getMessage());
@@ -1138,9 +1162,8 @@ public class ProcessDefinitionService extends
BaseDAGService {
*
* @param defineId define id
* @return task node list
- * @throws Exception exception
*/
- public Map<String, Object> getTaskNodeListByDefinitionId(Integer defineId)
throws Exception {
+ public Map<String, Object> getTaskNodeListByDefinitionId(Integer defineId)
{
Map<String, Object> result = new HashMap<>();
ProcessDefinition processDefinition =
processDefineMapper.selectById(defineId);
@@ -1158,7 +1181,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
//process data check
if (null == processData) {
logger.error("process data is null");
- putMsg(result,Status.DATA_IS_NOT_VALID, processDefinitionJson);
+ putMsg(result, Status.DATA_IS_NOT_VALID, processDefinitionJson);
return result;
}
@@ -1176,15 +1199,14 @@ public class ProcessDefinitionService extends
BaseDAGService {
*
* @param defineIdList define id list
* @return task node list
- * @throws Exception exception
*/
- public Map<String, Object> getTaskNodeListByDefinitionIdList(String
defineIdList) throws Exception {
+ public Map<String, Object> getTaskNodeListByDefinitionIdList(String
defineIdList) {
Map<String, Object> result = new HashMap<>();
Map<Integer, List<TaskNode>> taskNodeMap = new HashMap<>();
String[] idList = defineIdList.split(",");
List<Integer> idIntList = new ArrayList<>();
- for(String definitionId : idList) {
+ for (String definitionId : idList) {
idIntList.add(Integer.parseInt(definitionId));
}
Integer[] idArray = idIntList.toArray(new Integer[idIntList.size()]);
@@ -1195,7 +1217,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
return result;
}
- for(ProcessDefinition processDefinition : processDefinitionList){
+ for (ProcessDefinition processDefinition : processDefinitionList) {
String processDefinitionJson =
processDefinition.getProcessDefinitionJson();
ProcessData processData =
JSONUtils.parseObject(processDefinitionJson, ProcessData.class);
List<TaskNode> taskNodeList = (processData.getTasks() == null) ?
new ArrayList<>() : processData.getTasks();
@@ -1231,7 +1253,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
* Encapsulates the TreeView structure
*
* @param processId process definition id
- * @param limit limit
+ * @param limit limit
* @return tree view json data
* @throws Exception exception
*/
@@ -1241,7 +1263,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
ProcessDefinition processDefinition =
processDefineMapper.selectById(processId);
if (null == processDefinition) {
logger.info("process define not exists");
- putMsg(result,Status.PROCESS_DEFINE_NOT_EXIST, processDefinition);
+ putMsg(result, Status.PROCESS_DEFINE_NOT_EXIST, processDefinition);
return result;
}
DAG<String, TaskNode, TaskNodeRelation> dag =
genDagGraph(processDefinition);
@@ -1260,8 +1282,8 @@ public class ProcessDefinitionService extends
BaseDAGService {
*/
List<ProcessInstance> processInstanceList =
processInstanceMapper.queryByProcessDefineId(processId, limit);
- for(ProcessInstance processInstance:processInstanceList){
-
processInstance.setDuration(DateUtils.differSec(processInstance.getStartTime(),processInstance.getEndTime()));
+ for (ProcessInstance processInstance : processInstanceList) {
+
processInstance.setDuration(DateUtils.differSec(processInstance.getStartTime(),
processInstance.getEndTime()));
}
if (limit > processInstanceList.size()) {
@@ -1364,9 +1386,8 @@ public class ProcessDefinitionService extends
BaseDAGService {
*
* @param processDefinition process definition
* @return dag graph
- * @throws Exception if exception happens
*/
- private DAG<String, TaskNode, TaskNodeRelation>
genDagGraph(ProcessDefinition processDefinition) throws Exception {
+ private DAG<String, TaskNode, TaskNodeRelation>
genDagGraph(ProcessDefinition processDefinition) {
String processDefinitionJson =
processDefinition.getProcessDefinitionJson();
@@ -1386,8 +1407,6 @@ public class ProcessDefinitionService extends
BaseDAGService {
}
-
-
/**
* whether the graph has a ring
*
@@ -1405,7 +1424,7 @@ public class ProcessDefinitionService extends
BaseDAGService {
// Fill edge relations
for (TaskNode taskNodeResponse : taskNodeResponseList) {
taskNodeResponse.getPreTasks();
- List<String> preTasks =
JSONUtils.toList(taskNodeResponse.getPreTasks(),String.class);
+ List<String> preTasks =
JSONUtils.toList(taskNodeResponse.getPreTasks(), String.class);
if (CollectionUtils.isNotEmpty(preTasks)) {
for (String preTask : preTasks) {
if (!graph.addEdge(preTask, taskNodeResponse.getName())) {
@@ -1418,19 +1437,19 @@ public class ProcessDefinitionService extends
BaseDAGService {
return graph.hasCycle();
}
- private String recursionProcessDefinitionName(Integer projectId,String
processDefinitionName,int num){
+ private String recursionProcessDefinitionName(Integer projectId, String
processDefinitionName, int num) {
ProcessDefinition processDefinition =
processDefineMapper.queryByDefineName(projectId, processDefinitionName);
if (processDefinition != null) {
- if(num > 1){
- String str =
processDefinitionName.substring(0,processDefinitionName.length() - 3);
- processDefinitionName = str + "("+num+")";
- }else{
- processDefinitionName = processDefinition.getName() +
"("+num+")";
+ if (num > 1) {
+ String str = processDefinitionName.substring(0,
processDefinitionName.length() - 3);
+ processDefinitionName = str + "(" + num + ")";
+ } else {
+ processDefinitionName = processDefinition.getName() + "(" +
num + ")";
}
- }else{
+ } else {
return processDefinitionName;
}
- return
recursionProcessDefinitionName(projectId,processDefinitionName,num + 1);
+ return recursionProcessDefinitionName(projectId,
processDefinitionName, num + 1);
}
}
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java
index a5a3413..7e8a2ab 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java
@@ -504,9 +504,8 @@ public class ProcessInstanceService extends BaseDAGService {
*
* @param processInstanceId process instance id
* @return variables data
- * @throws Exception exception
*/
- public Map<String, Object> viewVariables( Integer processInstanceId)
throws Exception {
+ public Map<String, Object> viewVariables(Integer processInstanceId) {
Map<String, Object> result = new HashMap<>(5);
ProcessInstance processInstance =
processInstanceMapper.queryDetailById(processInstanceId);
@@ -537,7 +536,7 @@ public class ProcessInstanceService extends BaseDAGService {
List<TaskNode> taskNodeList = workflowData.getTasks();
// global param string
- String globalParamStr = JSON.toJSONString(globalParams);
+ String globalParamStr = JSONUtils.toJson(globalParams);
globalParamStr =
ParameterUtils.convertParameterPlaceholders(globalParamStr, timeParams);
globalParams = JSON.parseArray(globalParamStr, Property.class);
for (Property property : globalParams) {
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/exportprocess/DataSourceParam.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/exportprocess/DataSourceParam.java
index 00d9577..f34554b 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/exportprocess/DataSourceParam.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/exportprocess/DataSourceParam.java
@@ -16,9 +16,9 @@
*/
package org.apache.dolphinscheduler.api.utils.exportprocess;
-import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.dolphinscheduler.common.enums.TaskType;
-import org.apache.dolphinscheduler.common.utils.JSONUtils;
import org.apache.dolphinscheduler.dao.entity.DataSource;
import org.apache.dolphinscheduler.dao.mapper.DataSourceMapper;
import org.springframework.beans.factory.InitializingBean;
@@ -33,6 +33,7 @@ import java.util.List;
@Service
public class DataSourceParam implements ProcessAddTaskParam, InitializingBean {
+ private static final String PARAMS = "params";
@Autowired
private DataSourceMapper dataSourceMapper;
@@ -42,14 +43,14 @@ public class DataSourceParam implements
ProcessAddTaskParam, InitializingBean {
* @return task node json object
*/
@Override
- public JSONObject addExportSpecialParam(JSONObject taskNode) {
+ public JsonNode addExportSpecialParam(JsonNode taskNode) {
// add sqlParameters
- JSONObject sqlParameters =
JSONUtils.parseObject(taskNode.getString("params"));
- DataSource dataSource = dataSourceMapper.selectById((Integer)
sqlParameters.get("datasource"));
+ ObjectNode sqlParameters = (ObjectNode) taskNode.path(PARAMS);
+ DataSource dataSource =
dataSourceMapper.selectById(sqlParameters.get("datasource").asInt());
if (null != dataSource) {
sqlParameters.put("datasourceName", dataSource.getName());
}
- taskNode.put("params", sqlParameters);
+ ((ObjectNode)taskNode).set(PARAMS, sqlParameters);
return taskNode;
}
@@ -60,14 +61,14 @@ public class DataSourceParam implements
ProcessAddTaskParam, InitializingBean {
* @return task node json object
*/
@Override
- public JSONObject addImportSpecialParam(JSONObject taskNode) {
- JSONObject sqlParameters =
JSONUtils.parseObject(taskNode.getString("params"));
- List<DataSource> dataSources =
dataSourceMapper.queryDataSourceByName(sqlParameters.getString("datasourceName"));
+ public JsonNode addImportSpecialParam(JsonNode taskNode) {
+ ObjectNode sqlParameters = (ObjectNode) taskNode.path(PARAMS);
+ List<DataSource> dataSources =
dataSourceMapper.queryDataSourceByName(sqlParameters.path("datasourceName").asText());
if (!dataSources.isEmpty()) {
DataSource dataSource = dataSources.get(0);
sqlParameters.put("datasource", dataSource.getId());
}
- taskNode.put("params", sqlParameters);
+ ((ObjectNode)taskNode).set(PARAMS, sqlParameters);
return taskNode;
}
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/exportprocess/DependentParam.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/exportprocess/DependentParam.java
index b42b3b5..ce43d0e 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/exportprocess/DependentParam.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/exportprocess/DependentParam.java
@@ -16,8 +16,9 @@
*/
package org.apache.dolphinscheduler.api.utils.exportprocess;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.dolphinscheduler.common.enums.TaskType;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
@@ -34,6 +35,7 @@ import org.springframework.stereotype.Service;
@Service
public class DependentParam implements ProcessAddTaskParam, InitializingBean {
+ private static final String DEPENDENCE = "dependence";
@Autowired
ProcessDefinitionMapper processDefineMapper;
@@ -47,18 +49,18 @@ public class DependentParam implements ProcessAddTaskParam,
InitializingBean {
* @return task node json object
*/
@Override
- public JSONObject addExportSpecialParam(JSONObject taskNode) {
+ public JsonNode addExportSpecialParam(JsonNode taskNode) {
// add dependent param
- JSONObject dependentParameters =
JSONUtils.parseObject(taskNode.getString("dependence"));
+ ObjectNode dependentParameters =
JSONUtils.parseObject(taskNode.path(DEPENDENCE).asText());
if (null != dependentParameters) {
- JSONArray dependTaskList = (JSONArray)
dependentParameters.get("dependTaskList");
+ ArrayNode dependTaskList = (ArrayNode)
dependentParameters.get("dependTaskList");
for (int j = 0; j < dependTaskList.size(); j++) {
- JSONObject dependentTaskModel =
dependTaskList.getJSONObject(j);
- JSONArray dependItemList = (JSONArray)
dependentTaskModel.get("dependItemList");
+ JsonNode dependentTaskModel = dependTaskList.path(j);
+ ArrayNode dependItemList = (ArrayNode)
dependentTaskModel.get("dependItemList");
for (int k = 0; k < dependItemList.size(); k++) {
- JSONObject dependentItem = dependItemList.getJSONObject(k);
- int definitionId =
dependentItem.getInteger("definitionId");
+ ObjectNode dependentItem = (ObjectNode)
dependItemList.path(k);
+ int definitionId =
dependentItem.path("definitionId").asInt();
ProcessDefinition definition =
processDefineMapper.queryByDefineId(definitionId);
if (null != definition) {
dependentItem.put("projectName",
definition.getProjectName());
@@ -66,7 +68,7 @@ public class DependentParam implements ProcessAddTaskParam,
InitializingBean {
}
}
}
- taskNode.put("dependence", dependentParameters);
+ ((ObjectNode)taskNode).set(DEPENDENCE, dependentParameters);
}
return taskNode;
@@ -78,18 +80,18 @@ public class DependentParam implements ProcessAddTaskParam,
InitializingBean {
* @return
*/
@Override
- public JSONObject addImportSpecialParam(JSONObject taskNode) {
- JSONObject dependentParameters =
JSONUtils.parseObject(taskNode.getString("dependence"));
+ public JsonNode addImportSpecialParam(JsonNode taskNode) {
+ ObjectNode dependentParameters =
JSONUtils.parseObject(taskNode.path(DEPENDENCE).asText());
if(dependentParameters != null){
- JSONArray dependTaskList = (JSONArray)
dependentParameters.get("dependTaskList");
+ ArrayNode dependTaskList = (ArrayNode)
dependentParameters.path("dependTaskList");
for (int h = 0; h < dependTaskList.size(); h++) {
- JSONObject dependentTaskModel =
dependTaskList.getJSONObject(h);
- JSONArray dependItemList = (JSONArray)
dependentTaskModel.get("dependItemList");
+ ObjectNode dependentTaskModel = (ObjectNode)
dependTaskList.path(h);
+ ArrayNode dependItemList = (ArrayNode)
dependentTaskModel.get("dependItemList");
for (int k = 0; k < dependItemList.size(); k++) {
- JSONObject dependentItem = dependItemList.getJSONObject(k);
- Project dependentItemProject =
projectMapper.queryByName(dependentItem.getString("projectName"));
+ ObjectNode dependentItem = (ObjectNode)
dependItemList.path(k);
+ Project dependentItemProject =
projectMapper.queryByName(dependentItem.path("projectName").asText());
if(dependentItemProject != null){
- ProcessDefinition definition =
processDefineMapper.queryByDefineName(dependentItemProject.getId(),dependentItem.getString("definitionName"));
+ ProcessDefinition definition =
processDefineMapper.queryByDefineName(dependentItemProject.getId(),dependentItem.path("definitionName").asText());
if(definition != null){
dependentItem.put("projectId",dependentItemProject.getId());
dependentItem.put("definitionId",definition.getId());
@@ -97,7 +99,7 @@ public class DependentParam implements ProcessAddTaskParam,
InitializingBean {
}
}
}
- taskNode.put("dependence", dependentParameters);
+ ((ObjectNode)taskNode).set(DEPENDENCE, dependentParameters);
}
return taskNode;
}
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/exportprocess/ProcessAddTaskParam.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/exportprocess/ProcessAddTaskParam.java
index b30b777..8e40855 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/exportprocess/ProcessAddTaskParam.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/exportprocess/ProcessAddTaskParam.java
@@ -16,7 +16,7 @@
*/
package org.apache.dolphinscheduler.api.utils.exportprocess;
-import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.JsonNode;
/**
* ProcessAddTaskParam
@@ -28,12 +28,12 @@ public interface ProcessAddTaskParam {
* @param taskNode task node json object
* @return task node json object
*/
- JSONObject addExportSpecialParam(JSONObject taskNode);
+ JsonNode addExportSpecialParam(JsonNode taskNode);
/**
* add task special param: sql task dependent task
* @param taskNode task node json object
* @return task node json object
*/
- JSONObject addImportSpecialParam(JSONObject taskNode);
+ JsonNode addImportSpecialParam(JsonNode taskNode);
}
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
index 8f69b94..d1a0512 100644
---
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
@@ -16,8 +16,8 @@
*/
package org.apache.dolphinscheduler.api.service;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.dolphinscheduler.api.ApiApplicationServer;
import org.apache.dolphinscheduler.api.dto.ProcessMeta;
import org.apache.dolphinscheduler.api.enums.Status;
@@ -621,8 +621,8 @@ public class ProcessDefinitionServiceTest {
"\"preTasks\":[]}],\"tenantId\":1,\"timeout\":0}";
- JSONObject jsonObject = JSONUtils.parseObject(topProcessJson);
- JSONArray jsonArray = (JSONArray) jsonObject.get("tasks");
+ ObjectNode jsonObject = JSONUtils.parseObject(topProcessJson);
+ ArrayNode jsonArray = (ArrayNode) jsonObject.path("tasks");
String originSubJson = jsonArray.toString();
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/utils/exportprocess/DataSourceParamTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/utils/exportprocess/DataSourceParamTest.java
index b8fcd62..4566d93 100644
---
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/utils/exportprocess/DataSourceParamTest.java
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/utils/exportprocess/DataSourceParamTest.java
@@ -16,7 +16,8 @@
*/
package org.apache.dolphinscheduler.api.utils.exportprocess;
-import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.dolphinscheduler.api.ApiApplicationServer;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
import org.apache.dolphinscheduler.common.utils.StringUtils;
@@ -48,13 +49,13 @@ public class DataSourceParamTest {
"\"preTasks\":[\"dependent\"]}";
- JSONObject taskNode = JSONUtils.parseObject(sqlJson);
- if (StringUtils.isNotEmpty(taskNode.getString("type"))) {
- String taskType = taskNode.getString("type");
+ ObjectNode taskNode = JSONUtils.parseObject(sqlJson);
+ if (StringUtils.isNotEmpty(taskNode.path("type").asText())) {
+ String taskType = taskNode.path("type").asText();
ProcessAddTaskParam addTaskParam =
TaskNodeParamFactory.getByTaskType(taskType);
- JSONObject sql = addTaskParam.addExportSpecialParam(taskNode);
+ JsonNode sql = addTaskParam.addExportSpecialParam(taskNode);
JSONAssert.assertEquals(taskNode.toString(), sql.toString(),
false);
}
@@ -72,13 +73,13 @@ public class DataSourceParamTest {
"\"taskInstancePriority\":\"MEDIUM\",\"name\":\"mysql\",\"dependence\":{}," +
"\"retryInterval\":\"1\",\"preTasks\":[\"dependent\"],\"id\":\"tasks-8745\"}";
- JSONObject taskNode = JSONUtils.parseObject(sqlJson);
- if (StringUtils.isNotEmpty(taskNode.getString("type"))) {
- String taskType = taskNode.getString("type");
+ ObjectNode taskNode = JSONUtils.parseObject(sqlJson);
+ if (StringUtils.isNotEmpty(taskNode.path("type").asText())) {
+ String taskType = taskNode.path("type").asText();
ProcessAddTaskParam addTaskParam =
TaskNodeParamFactory.getByTaskType(taskType);
- JSONObject sql = addTaskParam.addImportSpecialParam(taskNode);
+ JsonNode sql = addTaskParam.addImportSpecialParam(taskNode);
JSONAssert.assertEquals(taskNode.toString(), sql.toString(),
false);
}
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/utils/exportprocess/DependentParamTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/utils/exportprocess/DependentParamTest.java
index d21b7be..be61ab7 100644
---
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/utils/exportprocess/DependentParamTest.java
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/utils/exportprocess/DependentParamTest.java
@@ -17,6 +17,8 @@
package org.apache.dolphinscheduler.api.utils.exportprocess;
import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.dolphinscheduler.api.ApiApplicationServer;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
import org.apache.dolphinscheduler.common.utils.StringUtils;
@@ -43,13 +45,13 @@ public class DependentParamTest {
"\"dependItemList\":[{\"projectId\":2,\"definitionId\":46,\"depTasks\":\"ALL\","
+
"\"cycle\":\"day\",\"dateValue\":\"today\"}]}]}}";
- JSONObject taskNode = JSONUtils.parseObject(dependentJson);
- if (StringUtils.isNotEmpty(taskNode.getString("type"))) {
- String taskType = taskNode.getString("type");
+ ObjectNode taskNode = JSONUtils.parseObject(dependentJson);
+ if (StringUtils.isNotEmpty(taskNode.path("type").asText())) {
+ String taskType = taskNode.path("type").asText();
ProcessAddTaskParam addTaskParam =
TaskNodeParamFactory.getByTaskType(taskType);
- JSONObject dependent =
addTaskParam.addExportSpecialParam(taskNode);
+ JsonNode dependent = addTaskParam.addExportSpecialParam(taskNode);
JSONAssert.assertEquals(taskNode.toString(), dependent.toString(),
false);
}
@@ -57,13 +59,13 @@ public class DependentParamTest {
String dependentEmpty =
"{\"type\":\"DEPENDENT\",\"id\":\"tasks-33787\"," +
"\"name\":\"dependent\",\"params\":{},\"description\":\"\",\"runFlag\":\"NORMAL\"}";
- JSONObject taskEmpty = JSONUtils.parseObject(dependentEmpty);
- if (StringUtils.isNotEmpty(taskEmpty.getString("type"))) {
- String taskType = taskEmpty.getString("type");
+ ObjectNode taskEmpty = JSONUtils.parseObject(dependentEmpty);
+ if (StringUtils.isNotEmpty(taskEmpty.path("type").asText())) {
+ String taskType = taskEmpty.path("type").asText();
ProcessAddTaskParam addTaskParam =
TaskNodeParamFactory.getByTaskType(taskType);
- JSONObject dependent =
addTaskParam.addImportSpecialParam(taskEmpty);
+ JsonNode dependent = addTaskParam.addImportSpecialParam(taskEmpty);
JSONAssert.assertEquals(taskEmpty.toString(),
dependent.toString(), false);
}
@@ -81,13 +83,13 @@ public class DependentParamTest {
"\"projectId\":1,\"cycle\":\"day\",\"definitionId\":7}],\"relation\":\"AND\"}],"
+
"\"relation\":\"AND\"},\"retryInterval\":\"1\",\"preTasks\":[],\"id\":\"tasks-55485\"}";
- JSONObject taskNode = JSONUtils.parseObject(dependentJson);
- if (StringUtils.isNotEmpty(taskNode.getString("type"))) {
- String taskType = taskNode.getString("type");
+ ObjectNode taskNode = JSONUtils.parseObject(dependentJson);
+ if (StringUtils.isNotEmpty(taskNode.path("type").asText())) {
+ String taskType = taskNode.path("type").asText();
ProcessAddTaskParam addTaskParam =
TaskNodeParamFactory.getByTaskType(taskType);
- JSONObject dependent =
addTaskParam.addImportSpecialParam(taskNode);
+ JsonNode dependent = addTaskParam.addImportSpecialParam(taskNode);
JSONAssert.assertEquals(taskNode.toString(), dependent.toString(),
false);
}
@@ -97,13 +99,13 @@ public class DependentParamTest {
"\"strategy\":\"\"},\"maxRetryTimes\":\"0\",\"taskInstancePriority\":\"MEDIUM\""
+
",\"name\":\"dependent\",\"retryInterval\":\"1\",\"preTasks\":[],\"id\":\"tasks-55485\"}";
- JSONObject taskNodeEmpty = JSONUtils.parseObject(dependentEmpty);
- if (StringUtils.isNotEmpty(taskNodeEmpty.getString("type"))) {
- String taskType = taskNodeEmpty.getString("type");
+ JsonNode taskNodeEmpty = JSONUtils.parseObject(dependentEmpty);
+ if (StringUtils.isNotEmpty(taskNodeEmpty.path("type").asText())) {
+ String taskType = taskNodeEmpty.path("type").asText();
ProcessAddTaskParam addTaskParam =
TaskNodeParamFactory.getByTaskType(taskType);
- JSONObject dependent =
addTaskParam.addImportSpecialParam(taskNode);
+ JsonNode dependent = addTaskParam.addImportSpecialParam(taskNode);
JSONAssert.assertEquals(taskNodeEmpty.toString(),
dependent.toString(), false);
}
diff --git
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/JSONUtils.java
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/JSONUtils.java
index f0aed91..4f70149 100644
---
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/JSONUtils.java
+++
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/JSONUtils.java
@@ -16,13 +16,12 @@
*/
package org.apache.dolphinscheduler.common.utils;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson.TypeReference;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -35,230 +34,233 @@ import java.util.*;
*/
public class JSONUtils {
- private static final Logger logger =
LoggerFactory.getLogger(JSONUtils.class);
-
- /**
- * can use static singleton, inject: just make sure to reuse!
- */
- private static final ObjectMapper objectMapper = new ObjectMapper();
-
- private JSONUtils() {
- //Feature that determines whether encountering of unknown properties,
false means not analyzer unknown properties
- objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,
false).setTimeZone(TimeZone.getDefault());
- }
-
- /**
- * json representation of object
- * @param object object
- * @return object to json string
- */
- public static String toJson(Object object) {
- try{
- return JSON.toJSONString(object,false);
- } catch (Exception e) {
- logger.error("object to json exception!",e);
+ private static final Logger logger =
LoggerFactory.getLogger(JSONUtils.class);
+
+ /**
+ * can use static singleton, inject: just make sure to reuse!
+ */
+ private static final ObjectMapper objectMapper = new ObjectMapper();
+
+ private JSONUtils() {
}
- return null;
- }
-
-
- /**
- *
- * This method deserializes the specified Json into an object of the
specified class. It is not
- * suitable to use if the specified class is a generic type since it will
not have the generic
- * type information because of the Type Erasure feature of Java. Therefore,
this method should not
- * be used if the desired type is a generic type. Note that this method
works fine if the any of
- * the fields of the specified object are generics, just the object itself
should not be a
- * generic type.
- *
- * @param json the string from which the object is to be deserialized
- * @param clazz the class of T
- * @param <T> T
- * @return an object of type T from the string
- * classOfT
- */
- public static <T> T parseObject(String json, Class<T> clazz) {
- if (StringUtils.isEmpty(json)) {
- return null;
+ static {
+ //Feature that determines whether encountering of unknown properties,
false means not analyzer unknown properties
+
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,
false).setTimeZone(TimeZone.getDefault());
+
objectMapper.configure(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT,
true).setTimeZone(TimeZone.getDefault());
}
- try {
- return JSON.parseObject(json, clazz);
- } catch (Exception e) {
- logger.error("parse object exception!",e);
+ /**
+ * json representation of object
+ *
+ * @param object object
+ * @return object to json string
+ */
+ public static String toJson(Object object) {
+ try {
+ return objectMapper.writeValueAsString(object);
+ } catch (Exception e) {
+ logger.error("object to json exception!", e);
+ }
+
+ return null;
}
- return null;
- }
-
-
- /**
- * json to list
- *
- * @param json json string
- * @param clazz class
- * @param <T> T
- * @return list
- */
- public static <T> List<T> toList(String json, Class<T> clazz) {
- if (StringUtils.isEmpty(json)) {
- return new ArrayList<>();
+
+
+ /**
+ * This method deserializes the specified Json into an object of the
specified class. It is not
+ * suitable to use if the specified class is a generic type since it will
not have the generic
+ * type information because of the Type Erasure feature of Java.
Therefore, this method should not
+ * be used if the desired type is a generic type. Note that this method
works fine if the any of
+ * the fields of the specified object are generics, just the object itself
should not be a
+ * generic type.
+ *
+ * @param json the string from which the object is to be deserialized
+ * @param clazz the class of T
+ * @param <T> T
+ * @return an object of type T from the string
+ * classOfT
+ */
+ public static <T> T parseObject(String json, Class<T> clazz) {
+ if (StringUtils.isEmpty(json)) {
+ return null;
+ }
+
+ try {
+ return objectMapper.readValue(json, clazz);
+ } catch (Exception e) {
+ logger.error("parse object exception!", e);
+ }
+ return null;
}
- try {
- return JSONArray.parseArray(json, clazz);
- } catch (Exception e) {
- logger.error("JSONArray.parseArray exception!",e);
+
+
+ /**
+ * json to list
+ *
+ * @param json json string
+ * @param clazz class
+ * @param <T> T
+ * @return list
+ */
+ public static <T> List<T> toList(String json, Class<T> clazz) {
+ if (StringUtils.isEmpty(json)) {
+ return new ArrayList<>();
+ }
+ try {
+ return objectMapper.readValue(json, new TypeReference<List<T>>() {
+ });
+ } catch (Exception e) {
+ logger.error("JSONArray.parseArray exception!", e);
+ }
+
+ return new ArrayList<>();
}
- return new ArrayList<>();
- }
+ /**
+ * check json object valid
+ *
+ * @param json json
+ * @return true if valid
+ */
+ public static boolean checkJsonValid(String json) {
+ if (StringUtils.isEmpty(json)) {
+ return false;
+ }
- /**
- * check json object valid
- *
- * @param json json
- * @return true if valid
- */
- public static boolean checkJsonValid(String json) {
+ try {
+ objectMapper.readTree(json);
+ return true;
+ } catch (IOException e) {
+ logger.error("check json object valid exception!", e);
+ }
- if (StringUtils.isEmpty(json)) {
- return false;
+ return false;
}
- try {
- objectMapper.readTree(json);
- return true;
- } catch (IOException e) {
- logger.error("check json object valid exception!",e);
- }
- return false;
- }
-
-
- /**
- * Method for finding a JSON Object field with specified name in this
- * node or its child nodes, and returning value it has.
- * If no matching field is found in this node or its descendants, returns
null.
- *
- * @param jsonNode json node
- * @param fieldName Name of field to look for
- *
- * @return Value of first matching node found, if any; null if none
- */
- public static String findValue(JsonNode jsonNode, String fieldName) {
- JsonNode node = jsonNode.findValue(fieldName);
-
- if (node == null) {
- return null;
- }
+ /**
+ * Method for finding a JSON Object field with specified name in this
+ * node or its child nodes, and returning value it has.
+ * If no matching field is found in this node or its descendants, returns
null.
+ *
+ * @param jsonNode json node
+ * @param fieldName Name of field to look for
+ * @return Value of first matching node found, if any; null if none
+ */
+ public static String findValue(JsonNode jsonNode, String fieldName) {
+ JsonNode node = jsonNode.findValue(fieldName);
- return node.toString();
- }
-
-
- /**
- * json to map
- *
- * {@link #toMap(String, Class, Class)}
- *
- * @param json json
- * @return json to map
- */
- public static Map<String, String> toMap(String json) {
- if (StringUtils.isEmpty(json)) {
- return null;
- }
+ if (node == null) {
+ return null;
+ }
- try {
- return JSON.parseObject(json, new TypeReference<HashMap<String,
String>>(){});
- } catch (Exception e) {
- logger.error("json to map exception!",e);
+ return node.toString();
}
- return null;
- }
-
- /**
- *
- * json to map
- *
- * @param json json
- * @param classK classK
- * @param classV classV
- * @param <K> K
- * @param <V> V
- * @return to map
- */
- public static <K, V> Map<K, V> toMap(String json, Class<K> classK, Class<V>
classV) {
- if (StringUtils.isEmpty(json)) {
- return null;
+
+ /**
+ * json to map
+ * <p>
+ * {@link #toMap(String, Class, Class)}
+ *
+ * @param json json
+ * @return json to map
+ */
+ public static Map<String, String> toMap(String json) {
+ if (StringUtils.isEmpty(json)) {
+ return null;
+ }
+
+ try {
+ return objectMapper.readValue(json, new TypeReference<Map<String,
String>>() {});
+ } catch (Exception e) {
+ logger.error("json to map exception!", e);
+ }
+
+ return null;
}
- try {
- return JSON.parseObject(json, new TypeReference<HashMap<K, V>>() {});
- } catch (Exception e) {
- logger.error("json to map exception!",e);
+ /**
+ * json to map
+ *
+ * @param json json
+ * @param classK classK
+ * @param classV classV
+ * @param <K> K
+ * @param <V> V
+ * @return to map
+ */
+ public static <K, V> Map<K, V> toMap(String json, Class<K> classK,
Class<V> classV) {
+ if (StringUtils.isEmpty(json)) {
+ return null;
+ }
+
+ try {
+ return objectMapper.readValue(json, new TypeReference<Map<K, V>>()
{
+ });
+ } catch (Exception e) {
+ logger.error("json to map exception!", e);
+ }
+
+ return null;
}
- return null;
- }
-
- /**
- * object to json string
- * @param object object
- * @return json string
- */
- public static String toJsonString(Object object) {
- try{
- return JSON.toJSONString(object,false);
- } catch (Exception e) {
- throw new RuntimeException("Object json deserialization exception.", e);
+ /**
+ * object to json string
+ *
+ * @param object object
+ * @return json string
+ */
+ public static String toJsonString(Object object) {
+ try {
+ return objectMapper.writeValueAsString(object);
+ } catch (Exception e) {
+ throw new RuntimeException("Object json deserialization
exception.", e);
+ }
}
- }
- public static JSONObject parseObject(String text) {
- try{
- return JSON.parseObject(text);
- } catch (Exception e) {
- throw new RuntimeException("String json deserialization exception.", e);
+ public static ObjectNode parseObject(String text) {
+ try {
+ return (ObjectNode) objectMapper.readTree(text);
+ } catch (Exception e) {
+ throw new RuntimeException("String json deserialization
exception.", e);
+ }
}
- }
- public static JSONArray parseArray(String text) {
- try{
- return JSON.parseArray(text);
- } catch (Exception e) {
- throw new RuntimeException("Json deserialization exception.", e);
+ public static ArrayNode parseArray(String text) {
+ try {
+ return (ArrayNode) objectMapper.readTree(text);
+ } catch (Exception e) {
+ throw new RuntimeException("Json deserialization exception.", e);
+ }
}
- }
+ /**
+ * json serializer
+ */
+ public static class JsonDataSerializer extends JsonSerializer<String> {
- /**
- * json serializer
- */
- public static class JsonDataSerializer extends JsonSerializer<String> {
+ @Override
+ public void serialize(String value, JsonGenerator gen,
SerializerProvider provider) throws IOException {
+ gen.writeRawValue(value);
+ }
- @Override
- public void serialize(String value, JsonGenerator gen, SerializerProvider
provider) throws IOException {
- gen.writeRawValue(value);
}
- }
+ /**
+ * json data deserializer
+ */
+ public static class JsonDataDeserializer extends JsonDeserializer<String> {
- /**
- * json data deserializer
- */
- public static class JsonDataDeserializer extends JsonDeserializer<String> {
+ @Override
+ public String deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException {
+ JsonNode node = p.getCodec().readTree(p);
+ return node.toString();
+ }
- @Override
- public String deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException {
- JsonNode node = p.getCodec().readTree(p);
- return node.toString();
}
-
- }
}
diff --git
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ParameterUtils.java
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ParameterUtils.java
index 270e0c4..f3efef2 100644
---
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ParameterUtils.java
+++
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ParameterUtils.java
@@ -196,7 +196,7 @@ public class ParameterUtils {
property.setValue(val);
}
}
- return JSON.toJSONString(globalParamList);
+ return JSONUtils.toJson(globalParamList);
}
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/exportprocess/ProcessAddTaskParam.java
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/StreamUtils.java
similarity index 57%
copy from
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/exportprocess/ProcessAddTaskParam.java
copy to
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/StreamUtils.java
index b30b777..f30638c 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/exportprocess/ProcessAddTaskParam.java
+++
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/StreamUtils.java
@@ -14,26 +14,23 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.dolphinscheduler.api.utils.exportprocess;
+package org.apache.dolphinscheduler.common.utils;
-import com.alibaba.fastjson.JSONObject;
+import java.util.Iterator;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
-/**
- * ProcessAddTaskParam
- */
-public interface ProcessAddTaskParam {
+public class StreamUtils {
+
+ private StreamUtils() { }
+
+ public static <T> Stream<T> asStream(Iterator<T> sourceIterator) {
+ return asStream(sourceIterator, false);
+ }
- /**
- * add export task special param: sql task dependent task
- * @param taskNode task node json object
- * @return task node json object
- */
- JSONObject addExportSpecialParam(JSONObject taskNode);
+ public static <T> Stream<T> asStream(Iterator<T> sourceIterator, boolean
parallel) {
+ Iterable<T> iterable = () -> sourceIterator;
+ return StreamSupport.stream(iterable.spliterator(), parallel);
+ }
- /**
- * add task special param: sql task dependent task
- * @param taskNode task node json object
- * @return task node json object
- */
- JSONObject addImportSpecialParam(JSONObject taskNode);
}
diff --git
a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/JSONUtilsTest.java
b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/JSONUtilsTest.java
index 8ce6034..1756078 100644
---
a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/JSONUtilsTest.java
+++
b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/JSONUtilsTest.java
@@ -17,6 +17,8 @@
package org.apache.dolphinscheduler.common.utils;
import com.alibaba.fastjson.JSON;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.dolphinscheduler.common.enums.DataType;
import org.apache.dolphinscheduler.common.enums.Direct;
import org.apache.dolphinscheduler.common.process.Property;
@@ -101,9 +103,6 @@ public class JSONUtilsTest {
@Test
public void testParseObject() {
- Assert.assertEquals("{\"foo\":\"bar\"}", JSONUtils.parseObject(
- "{\n" + "\"foo\": \"bar\",\n" + "}", String.class));
-
Assert.assertNull(JSONUtils.parseObject("", null));
Assert.assertNull(JSONUtils.parseObject("foo", String.class));
}
@@ -134,15 +133,19 @@ public class JSONUtilsTest {
map.put("foo","bar");
Assert.assertTrue(map.equals(JSONUtils.toMap(
- "{\n" + "\"foo\": \"bar\",\n" + "}")));
+ "{\n" + "\"foo\": \"bar\"\n" + "}")));
Assert.assertFalse(map.equals(JSONUtils.toMap(
- "{\n" + "\"bar\": \"foo\",\n" + "}")));
+ "{\n" + "\"bar\": \"foo\"\n" + "}")));
Assert.assertNull(JSONUtils.toMap("3"));
Assert.assertNull(JSONUtils.toMap(null));
Assert.assertNull(JSONUtils.toMap("3", null, null));
Assert.assertNull(JSONUtils.toMap(null, null, null));
+
+ String str =
"{\"resourceList\":[],\"localParams\":[],\"rawScript\":\"#!/bin/bash\\necho
\\\"shell-1\\\"\"}";
+ Map<String, String> m = JSONUtils.toMap(str);
+ Assert.assertNotNull(m);
}
@Test
@@ -155,4 +158,27 @@ public class JSONUtilsTest {
Assert.assertEquals(String.valueOf((Object) null),
JSONUtils.toJsonString(null));
}
+
+ @Test
+ public void parseObject() {
+ String str = "{\"color\":\"yellow\",\"type\":\"renault\"}";
+ ObjectNode node = JSONUtils.parseObject(str);
+
+ Assert.assertEquals("yellow", node.path("color").asText());
+
+ node.put("price", 100);
+ Assert.assertEquals(100, node.path("price").asInt());
+
+ node.put("color", "red");
+ Assert.assertEquals("red", node.path("color").asText());
+ }
+
+ @Test
+ public void parseArray() {
+ String str = "[{\"color\":\"yellow\",\"type\":\"renault\"}]";
+ ArrayNode node = JSONUtils.parseArray(str);
+
+ Assert.assertEquals("yellow", node.path(0).path("color").asText());
+ }
+
}
diff --git
a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/ParameterUtilsTest.java
b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/ParameterUtilsTest.java
index abdc15c..3d40e7a 100644
---
a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/ParameterUtilsTest.java
+++
b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/ParameterUtilsTest.java
@@ -91,13 +91,13 @@ public class ParameterUtilsTest {
globalParamList.add(property);
String result2 =
ParameterUtils.curingGlobalParams(null,globalParamList,CommandType.START_CURRENT_TASK_PROCESS,scheduleTime);
- Assert.assertEquals(result2, JSON.toJSONString(globalParamList));
+ Assert.assertEquals(result2, JSONUtils.toJson(globalParamList));
String result3 =
ParameterUtils.curingGlobalParams(globalParamMap,globalParamList,CommandType.START_CURRENT_TASK_PROCESS,null);
- Assert.assertEquals(result3, JSON.toJSONString(globalParamList));
+ Assert.assertEquals(result3, JSONUtils.toJson(globalParamList));
String result4 = ParameterUtils.curingGlobalParams(globalParamMap,
globalParamList, CommandType.START_CURRENT_TASK_PROCESS, scheduleTime);
- Assert.assertEquals(result4, JSON.toJSONString(globalParamList));
+ Assert.assertEquals(result4, JSONUtils.toJson(globalParamList));
//test var $ startsWith
globalParamMap.put("bizDate","${system.biz.date}");
@@ -113,7 +113,7 @@ public class ParameterUtilsTest {
globalParamList.add(property4);
String result5 = ParameterUtils.curingGlobalParams(globalParamMap,
globalParamList, CommandType.START_CURRENT_TASK_PROCESS, scheduleTime);
- Assert.assertEquals(result5,JSONUtils.toJsonString(globalParamList));
+ Assert.assertEquals(result5, JSONUtils.toJson(globalParamList));
}
/**
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/exportprocess/ProcessAddTaskParam.java
b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/StreamUtilsTest.java
similarity index 57%
copy from
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/exportprocess/ProcessAddTaskParam.java
copy to
dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/StreamUtilsTest.java
index b30b777..5a04969 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/exportprocess/ProcessAddTaskParam.java
+++
b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/StreamUtilsTest.java
@@ -14,26 +14,26 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.dolphinscheduler.api.utils.exportprocess;
+package org.apache.dolphinscheduler.common.utils;
-import com.alibaba.fastjson.JSONObject;
+import org.junit.Assert;
+import org.junit.Test;
-/**
- * ProcessAddTaskParam
- */
-public interface ProcessAddTaskParam {
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static org.junit.Assert.*;
+
+public class StreamUtilsTest {
- /**
- * add export task special param: sql task dependent task
- * @param taskNode task node json object
- * @return task node json object
- */
- JSONObject addExportSpecialParam(JSONObject taskNode);
+ @Test
+ public void asStream() {
+ List<String> list = Arrays.asList("a", "b", "c");
+ List<String> ret = StreamUtils.asStream(list.iterator())
+ .filter(item -> item.equals("a"))
+ .collect(Collectors.toList());
+ Assert.assertEquals("a", ret.get(0));
+ }
- /**
- * add task special param: sql task dependent task
- * @param taskNode task node json object
- * @return task node json object
- */
- JSONObject addImportSpecialParam(JSONObject taskNode);
-}
+}
\ No newline at end of file