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

  1. Write the single-unit duedate as '<amount> <unit>', e.g. '2 hours' or '1 day'
  2. 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)