flowable/flowable-engine · error · FlowableIllegalArgumentException
Invalid reschedule timer action. Reschedule timer actions mu
Error message
Invalid reschedule timer action. Reschedule timer actions must have a valid due date
What it means
The 'reschedule' action for a CMMN timer job requires a valid dueDate in the request. Flowable throws FlowableIllegalArgumentException when dueDate is null, because the engine cannot compute a new schedule without it.
Source
Thrown at modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/management/JobResource.java:257
@PostMapping("/cmmn-management/timer-jobs/{jobId}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void executeTimerJobAction(@ApiParam(name = "jobId") @PathVariable String jobId, @RequestBody TimerJobActionRequest actionRequest) {
if (actionRequest == null || !(MOVE_ACTION.equals(actionRequest.getAction()) || RESCHEDULE_ACTION.equals(actionRequest.getAction()))) {
throw new FlowableIllegalArgumentException("Invalid action, only 'move' or 'reschedule' are supported.");
}
Job job = getTimerJobById(jobId);
if (MOVE_ACTION.equals(actionRequest.getAction())) {
try {
managementService.moveTimerToExecutableJob(job.getId());
} catch (FlowableObjectNotFoundException e) {
// Re-throw to have consistent error-messaging across REST-api
throw new FlowableObjectNotFoundException("Could not find a timer job with id '" + jobId + "'.", Job.class);
}
} else if (RESCHEDULE_ACTION.equals(actionRequest.getAction())) {
if (actionRequest.getDueDate() == null) {
throw new FlowableIllegalArgumentException("Invalid reschedule timer action. Reschedule timer actions must have a valid due date");
}
try {
managementService.rescheduleTimeDateValueJob(job.getId(), actionRequest.getDueDate());
} catch (FlowableObjectNotFoundException e) {
// Re-throw to have consistent error-messaging across REST-api
throw new FlowableObjectNotFoundException("Could not find a timer job with id '" + jobId + "'.", Job.class);
}
}
}
@ApiOperation(value = "Execute a history job", tags = { "Jobs" }, code = 204)
@ApiResponses(value = {
@ApiResponse(code = 204, message = "Indicates the job was executed. Response-body is intentionally empty."),
@ApiResponse(code = 404, message = "Indicates the requested job was not found."),
@ApiResponse(code = 500, message = "Indicates the an exception occurred while executing the job. The status-description contains additional detail about the error. The full error-stacktrace can be fetched later on if needed.")
})
@PostMapping("/cmmn-management/history-jobs/{jobId}")
@ResponseStatus(HttpStatus.NO_CONTENT)View on GitHub (pinned to d6d39ce1c6)
Solutions
- Add a valid dueDate (ISO-8601) to the reschedule request body
- Ensure the field is named exactly dueDate
- Validate the date serializes correctly in your client library
Example fix
// before
{"action":"reschedule"}
// after
{"action":"reschedule","dueDate":"2026-02-01T08:00:00Z"} Defensive patterns
Strategy: validation
Validate before calling
if (action === 'reschedule' && !body.dueDate) throw new Error('dueDate is required for reschedule'); Type guard
function canReschedule(r) { return !!r && r.action === 'reschedule' && typeof r.dueDate === 'string' && !isNaN(Date.parse(r.dueDate)); } Try / catch
try { await reschedule(jobId, dueDate); }
catch (e) { if (e.status === 400 && /valid due date/.test(e.message)) { /* supply dueDate and retry once */ } else throw e; } Prevention
- Validate ISO-8601 date serialization in your client
- Use a typed request model for the action payload
- Unit-test reschedule payloads against the endpoint
When it happens
Trigger: POST /cmmn-management/timer-jobs/{jobId} with {"action":"reschedule"} but no dueDate field, or dueDate explicitly null.
Common situations: Clients sending only the action field copied from a 'move' request, JSON field-name typos like due_date, or forgetting the ISO-8601 date when migrating scripts from move to reschedule.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- Variable name is required
- taskIds can not be null for bulk update tasks requests
- A group or a user is required to create an identity link.
- Variable name is required
- Either processDefinitionId, processDefinitionKey or message
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/7aa8c9e231f3bcf3.
Report an issue: GitHub.