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
- Format the submitted value exactly per the datePattern declared for the form property in the BPMN (e.g. SimpleDateFormat with that pattern).
- Validate/parse client-side before submission and show a pattern-specific error.
- Update the form's flowable:datePattern attribute if the required format changed.
- 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
- Render date inputs with the exact BPMN datePattern (e.g. with a date picker formatted accordingly).
- Validate client-side before submission.
- Trim and strip any trailing characters from user-entered dates.
- Keep datePattern in sync across all forms using the same field.
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
- form property '" + id + "' is not writable
- form property '" + id + "' is required
- Invalid value for enum form property: + value
- A channel key detection value is required for the channel…
- A group or a user is required to create an identity link.
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)