{"record":{"id":"ac2b4afc32cc0f1f","repo":"flowable/flowable-engine","slug":"invalid-duedate-format-singleunitquantity","errorCode":null,"errorMessage":"invalid duedate format: ${singleUnitQuantity}","messagePattern":"invalid duedate format: (.+?)","errorType":"validation","errorClass":"org.flowable.common.engine.api.FlowableIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/calendar/DefaultBusinessCalendar.java","lineNumber":78,"sourceCode":"        }\n\n        return resolvedDuedate;\n    }\n\n    @Override\n    public Boolean validateDuedate(String duedateDescription, int maxIterations, Date endDate, Date newTimer) {\n        return true;\n    }\n\n    @Override\n    public Date resolveEndDate(String endDate) {\n        return null;\n    }\n\n    protected Date addSingleUnitQuantity(Date startDate, String singleUnitQuantity) {\n        int spaceIndex = singleUnitQuantity.indexOf(' ');\n        if (spaceIndex == -1 || singleUnitQuantity.length() < spaceIndex + 1) {\n            throw new FlowableIllegalArgumentException(\"invalid duedate format: \" + singleUnitQuantity);\n        }\n\n        String quantityText = singleUnitQuantity.substring(0, spaceIndex);\n        int quantity = Integer.parseInt(quantityText);\n\n        String unitText = singleUnitQuantity.substring(spaceIndex + 1).trim().toLowerCase();\n\n        int unit = units.get(unitText);\n\n        GregorianCalendar calendar = new GregorianCalendar();\n        calendar.setTime(startDate);\n        calendar.add(unit, quantity);\n\n        return calendar.getTime();\n    }\n}\n","sourceCodeStart":60,"sourceCodeEnd":95,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/calendar/DefaultBusinessCalendar.java#L60-L95","documentation":"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.","triggerScenarios":"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.","commonSituations":"See trigger scenarios.","solutions":["Write the single-unit duedate as '<amount> <unit>', e.g. '2 hours' or '1 day'","For anything more complex use an ISO-8601 duration or a cron cycle instead"],"exampleFix":null,"handlingStrategy":"validation","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"}