in data-orchestrator/workflow-engine/workflow-engine-core/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/TaskUtil.java [85:108]
public static <T extends AbstractTask> Map<String, String> serializeTaskData(T data) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
Map<String, String> result = new HashMap<>();
for (Class<?> c = data.getClass(); c != null; c = c.getSuperclass()) {
Field[] fields = c.getDeclaredFields();
for (Field classField : fields) {
TaskParam parm = classField.getAnnotation(TaskParam.class);
try {
if (parm != null) {
Object propertyValue = PropertyUtils.getProperty(data, classField.getName());
if (propertyValue instanceof TaskParamType) {
result.put(parm.name(), TaskParamType.class.cast(propertyValue).serialize());
} else {
result.put(parm.name(), propertyValue.toString());
}
}
} catch (Exception e) {
logger.error("Failed to serialize task parameter {} in class {}", parm.name(), data.getClass().getName());
throw e;
}
}
}
return result;
}