flowable/flowable-engine · warning
parameter target expression did not resolve to a variable…
Error message
{} parameter target expression {} did not resolve to a variable name, this is most likely a programmatic error What it means
Warning logged by IOParameterUtil.processParameters when an in/out parameter's targetExpression (evaluated against the source container) returns null instead of a variable name. Shared by processInParameters, processOutParameters and extractOutVariables; the parameter is treated as misconfigured and the variable is not mapped under the expected name.
Solutions
- Correct the targetExpression so it always returns a non-null String variable name.
- Initialize the referenced variable in the source container before parameter processing.
- Use the static target attribute when the name is constant.
- Add null-safe defaults in the expression, e.g. ${name ?: 'fallbackVar'}.
Example fix
// before
<flowable:in source="input" targetExpression="${possiblyNullName}" />
// after
<flowable:in source="input" targetExpression="${varName ?: 'defaultInput'}" /> Defensive patterns
Strategy: validation
Validate before calling
Object name = expressionManager.createExpression(parameter.getTargetExpression()).getValue(sourceContainer);
if (name == null) throw new IllegalStateException("IO parameter targetExpression resolves to null: " + parameter.getTargetExpression()); Try / catch
null
Prevention
- Add null-safe defaults in expressions (e.g. ${v ?: 'default'}).
- Verify source-scope variables exist before parameter mapping runs.
- Prefer static target attributes for constant names.
When it happens
Trigger: Any CMMN task (process/case/task/decision) IO parameter whose targetExpression evaluates to null during processParameters.
Common situations: Expression typos, variables not yet initialized in the source scope, expressions returning null conditionally, migrating models that used static targets to dynamic expressions without guarantees.
Understand the failure class
Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.
Related errors
- Out parameter target expression
- Out parameter target expression
- Can only use a collection of String elements for…
- Case instance id is required
- CaseMigrationService cannot be null, Obtain your builder…
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/93ad54b209913b5c.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/util/IOParameterUtil.java:78
Expression expression = expressionManager.createExpression(parameter.getSourceExpression().trim());
value = expression.getValue(sourceContainer);
} else {
value = sourceContainer.getVariable(parameter.getSource());
}
if (value != null) {
value = JsonUtil.deepCopyIfJson(value);
}
String variableName = null;
if (StringUtils.isNotEmpty(parameter.getTargetExpression())) {
Expression expression = expressionManager.createExpression(parameter.getTargetExpression());
Object variableNameValue = expression.getValue(sourceContainer);
if (variableNameValue != null) {
variableName = variableNameValue.toString();
} else {
LOGGER.warn("{} parameter target expression {} did not resolve to a variable name, this is most likely a programmatic error",
parameterType, parameter.getTargetExpression());
}
} else if (StringUtils.isNotEmpty(parameter.getTarget())) {
variableName = parameter.getTarget();
}
// Apply type conversion if a target type (for in parameters) or source type (for out parameters) is specified
String conversionType = null;
if (StringUtils.isNotEmpty(parameter.getTargetType())) {
conversionType = parameter.getTargetType();
} else if (StringUtils.isNotEmpty(parameter.getSourceType())) {
conversionType = parameter.getSourceType();
}
if (conversionType != null && value != null) {
var cmmnEngineConfiguration = CommandContextUtil.getCmmnEngineConfiguration();View on GitHub (pinned to d6d39ce1c6)