flowable/flowable-engine · error · FlowableIllegalArgumentException

invalid date value " + propertyValue

Error message

invalid date value " + propertyValue

What it means

DateFormType.convertFormValueToModelValue parses the submitted form string into a Date using the configured date pattern (strictly, rejecting trailing characters). If parsing fails with a ParseException, FlowableIllegalArgumentException 'invalid date value <input>' is thrown. The input does not match the declared pattern or is not a real date.

Solutions

  1. Format the submitted value exactly per the datePattern declared for the form property in the BPMN (e.g. SimpleDateFormat with that pattern).
  2. Validate/parse client-side before submission and show a pattern-specific error.
  3. Update the form's flowable:datePattern attribute if the required format changed.
  4. Normalize input (trim, strip trailing text) before calling the form service.

Example fix

// before
properties.put("startDate", "2020-1-5"); // pattern is dd/MM/yyyy
// after
properties.put("startDate", new SimpleDateFormat("dd/MM/yyyy").format(
    new GregorianCalendar(2020, Calendar.JANUARY, 5).getTime()));
Defensive patterns

Strategy: validation

Validate before calling

String pattern = formProperty.getDatePattern();
try {
    new SimpleDateFormat(pattern).parse(submittedValue);
} catch (ParseException e) {
    throw new IllegalArgumentException("Value must match pattern " + pattern);
}

Try / catch

try {
    formService.submitStartFormData(processDefinitionId, properties);
} catch (FlowableIllegalArgumentException e) {
    if (e.getMessage().startsWith("invalid date value")) {
        properties.put(dateField, reformatToPattern(properties.get(dateField)));
        formService.submitStartFormData(processDefinitionId, properties);
    } else { throw e; }
}

Prevention

When it happens

Trigger: Submitting a form property of type 'date' via FormService.submitTaskFormData / startProcessInstanceByForm where the value does not parse with the form's datePattern (e.g. '31/02/2020', '2020-01-05 12:00' against pattern 'dd/MM/yyyy', or '05/01/2020 x').

Common situations: Locale differences (US MM/dd vs dd/MM), users typing free-form dates in a UI, timezone/extra characters appended, pattern changed in BPMN but clients still sending the old format.

Related errors


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

Appendix: source

Thrown at modules/flowable-engine/src/main/java/org/flowable/engine/impl/form/DateFormType.java:71

            return datePattern;
        }
        return null;
    }

    @Override
    public Object convertFormValueToModelValue(String propertyValue) {
        if (StringUtils.isEmpty(propertyValue)) {
            return null;
        }
        try {
            if (lenientDateParsing) {
                return dateFormat.parseObject(propertyValue);
            }
            // FastDateFormat is always lenient, so strict parsing uses DateUtils,
            // which also rejects input with trailing characters after the date.
            return DateUtils.parseDateStrictly(propertyValue, datePattern);
        } catch (ParseException e) {
            throw new FlowableIllegalArgumentException("invalid date value " + propertyValue, e);
        }
    }

    @Override
    public String convertModelValueToFormValue(Object modelValue) {
        if (modelValue == null) {
            return null;
        }
        return dateFormat.format(modelValue);
    }
}

View on GitHub (pinned to d6d39ce1c6)