in src/main/java/org/apache/commons/scxml2/model/Final.java [72:112]
public Object processDoneData(final SCXMLExecutionContext exctx) throws ModelException {
Object result = null;
if (doneData != null) {
try {
final Content content = doneData.getContent();
final Evaluator eval = exctx.getEvaluator();
final Context ctx = exctx.getScInstance().getGlobalContext();
if (content != null) {
if (content.getExpr() != null) {
Object evalResult;
try {
evalResult = eval.eval(ctx, content.getExpr());
} catch (final SCXMLExpressionException e) {
exctx.getInternalIOProcessor().addEvent(new EventBuilder(TriggerEvent.ERROR_EXECUTION,
TriggerEvent.ERROR_EVENT).build());
exctx.getErrorReporter().onError(ErrorConstants.EXPRESSION_ERROR,
"Failed to evaluate <donedata> <content> expression due to error: "+ e.getMessage()
+ ", Using empty value instead.", getParent());
evalResult = "";
}
result = eval.cloneData(evalResult);
} else if (content.getParsedValue() != null) {
result = eval.cloneData(content.getParsedValue().getValue());
}
} else {
final Map<String, Object> payloadDataMap = new LinkedHashMap<>();
PayloadBuilder.addParamsToPayload(exctx.getScInstance().getGlobalContext(),
exctx.getEvaluator(), doneData.getParams(), payloadDataMap);
if (!payloadDataMap.isEmpty()) {
result = payloadDataMap;
}
}
} catch (final SCXMLExpressionException e) {
result = null;
exctx.getInternalIOProcessor().addEvent(new EventBuilder(TriggerEvent.ERROR_EXECUTION, TriggerEvent.ERROR_EVENT).build());
exctx.getErrorReporter().onError(ErrorConstants.EXPRESSION_ERROR,
"Failed to process final donedata due to error: "+ e.getMessage(), getParent());
}
}
return result;
}