flowable/flowable-engine · warning

property not found in task description expression

Error message

property not found in task description expression {}

What it means

Logged by UserTaskActivityBehavior when evaluating the task's description expression throws an ActivitiException (e.g. the referenced property is missing). The literal expression text becomes the description as fallback and execution proceeds.

Solutions

  1. Initialize or guarantee the referenced variable before the user task
  2. Use a null-safe EL default in the description expression
  3. Fix the expression path in the BPMN model

Example fix

// before
<userTask documentation="Handle ${issue.code}" />
// after
<userTask documentation="Handle ${issue != null ? issue.code : 'unassigned'}" />
Defensive patterns

Strategy: validation

Validate before calling

if (execution.getVariable("issue") == null) { execution.setVariable("issue", defaultIssue); }

Try / catch

try { desc = (String) expr.getValue(execution); } catch (ActivitiException e) { desc = expr.getExpressionText(); LOGGER.warn(...); }

Prevention

When it happens

Trigger: A user task with a documentation/description expression such as ${task.doc.reason} where the property does not resolve at runtime.

Common situations: Variables removed or not yet set when the task is created; EL path typos; refactorings that renamed process variables.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/61a3c5e6d827b018. Report an issue: GitHub.

Appendix: source

Thrown at modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/UserTaskActivityBehavior.java:147

        if (activeNameExpression != null) {
            String name = null;
            try {
                name = (String) activeNameExpression.getValue(execution);
            } catch (ActivitiException e) {
                name = activeNameExpression.getExpressionText();
                LOGGER.warn("property not found in task name expression {}", e.getMessage());
            }
            task.setName(name);
        }

        if (activeDescriptionExpression != null) {
            String description = null;
            try {
                description = (String) activeDescriptionExpression.getValue(execution);
            } catch (ActivitiException e) {
                description = activeDescriptionExpression.getExpressionText();
                LOGGER.warn("property not found in task description expression {}", e.getMessage());
            }
            task.setDescription(description);
        }

        if (activeDueDateExpression != null) {
            Object dueDate = activeDueDateExpression.getValue(execution);
            if (dueDate != null) {
                if (dueDate instanceof Date) {
                    task.setDueDate((Date) dueDate);
                } else if (dueDate instanceof String) {
                    BusinessCalendar businessCalendar = Context
                            .getProcessEngineConfiguration()
                            .getBusinessCalendarManager()
                            .getBusinessCalendar(taskDefinition.getBusinessCalendarNameExpression().getValue(execution).toString());
                    task.setDueDate(businessCalendar.resolveDuedate((String) dueDate));
                } else {
                    throw new ActivitiIllegalArgumentException("Due date expression does not resolve to a Date or Date string: " +
                            activeDueDateExpression.getExpressionText());

View on GitHub (pinned to d6d39ce1c6)