{"record":{"id":"475143ffcb323d13","repo":"flowable/flowable-engine","slug":"failed-to-parse-cron-expression-duedatedescript","errorCode":null,"errorMessage":"Failed to parse cron expression: ${duedateDescription}","messagePattern":"Failed to parse cron expression: (.+?)","errorType":"exception","errorClass":"org.flowable.common.engine.api.FlowableException","httpStatus":null,"severity":"error","filePath":"modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/calendar/CycleBusinessCalendar.java","lineNumber":39,"sourceCode":"\n    public static final String NAME = \"cycle\";\n\n    public CycleBusinessCalendar(ClockReader clockReader) {\n        super(clockReader);\n    }\n\n    @Override\n    public Date resolveDuedate(String duedateDescription, int maxIterations) {\n        try {\n            if (duedateDescription != null && duedateDescription.startsWith(\"R\")) {\n                return new DurationHelper(duedateDescription, maxIterations, clockReader).getDateAfter();\n            } else {\n                CronExpression ce = new CronExpression(duedateDescription, clockReader);\n                return ce.getTimeAfter(clockReader.getCurrentTime());\n            }\n\n        } catch (Exception e) {\n            throw new FlowableException(\"Failed to parse cron expression: \" + duedateDescription, e);\n        }\n\n    }\n\n    @Override\n    public Boolean validateDuedate(String duedateDescription, int maxIterations, Date endDate, Date newTimer) {\n        if (endDate != null) {\n            return super.validateDuedate(duedateDescription, maxIterations, endDate, newTimer);\n        }\n        // end date could be part of the cron expression\n        try {\n            if (duedateDescription != null && duedateDescription.startsWith(\"R\")) {\n                return new DurationHelper(duedateDescription, maxIterations, clockReader).isValidDate(newTimer);\n            } else {\n                return true;\n            }\n\n        } catch (Exception e) {","sourceCodeStart":21,"sourceCodeEnd":57,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/calendar/CycleBusinessCalendar.java#L21-L57","documentation":"Wrapper thrown by CycleBusinessCalendar.resolveDuedate: the duedate description was treated as a cron expression and CronExpression parsing failed, meaning the timer/cycle configuration string is not a valid cron (and not a valid R/ISO duration cycle either).","triggerScenarios":"Thrown at modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/calendar/CycleBusinessCalendar.java:39 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Correct the duedate string to a valid cron expression or an R/duration cycle","Test the expression with a cron validator before deploying the process definition"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}