flowable/flowable-engine · error · org.flowable.common.engine.api.FlowableIllegalArgumentException
invalid duedate format
Error message
invalid duedate format: ${singleUnitQuantity} What it means
Guard in DefaultBusinessCalendar.addSingleUnitQuantity: the duedate was given as a single-unit quantity (e.g. '2 hours') but the string has no space separating number and unit (or is otherwise malformed), so the quantity cannot be parsed.
Solutions
- Write the single-unit duedate as '<amount> <unit>', e.g. '2 hours' or '1 day'
- For anything more complex use an ISO-8601 duration or a cron cycle instead
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/calendar/DefaultBusinessCalendar.java:78 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/ac2b4afc32cc0f1f.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/calendar/DefaultBusinessCalendar.java:78
}
return resolvedDuedate;
}
@Override
public Boolean validateDuedate(String duedateDescription, int maxIterations, Date endDate, Date newTimer) {
return true;
}
@Override
public Date resolveEndDate(String endDate) {
return null;
}
protected Date addSingleUnitQuantity(Date startDate, String singleUnitQuantity) {
int spaceIndex = singleUnitQuantity.indexOf(' ');
if (spaceIndex == -1 || singleUnitQuantity.length() < spaceIndex + 1) {
throw new FlowableIllegalArgumentException("invalid duedate format: " + singleUnitQuantity);
}
String quantityText = singleUnitQuantity.substring(0, spaceIndex);
int quantity = Integer.parseInt(quantityText);
String unitText = singleUnitQuantity.substring(spaceIndex + 1).trim().toLowerCase();
int unit = units.get(unitText);
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(startDate);
calendar.add(unit, quantity);
return calendar.getTime();
}
}
View on GitHub (pinned to d6d39ce1c6)