{"record":{"id":"95290f2ac2e39bd6","repo":"flowable/flowable-engine","slug":"using-joda-time-localdate-has-been-deprecated-and-95290f","errorCode":null,"errorMessage":"Using Joda-Time LocalDate has been deprecated and will be removed in a future version.","messagePattern":"Using Joda-Time LocalDate has been deprecated and will be removed in a future version\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/DMNParseUtil.java","lineNumber":131,"sourceCode":"    protected static Object getFormattedValue(Object value, Object inputCollection) {\n        Class<?> collectionType = getTargetType(inputCollection);\n        return formatElementValue(value, collectionType);\n    }\n\n    protected static Object formatElementValue(Object value, Class<?> collectionType) {\n        if (value instanceof String stringValue) {\n            if (stringValue.isEmpty()) {\n                return null;\n            }\n\n            value = removedSurroundingQuotes(stringValue);\n        }\n\n        // format element based on collection type\n        if (Date.class.equals(collectionType)) {\n            return DateUtil.toDate(value);\n        } else if (LocalDate.class.equals(collectionType)) {\n            JodaDeprecationLogger.LOGGER.warn(\"Using Joda-Time LocalDate has been deprecated and will be removed in a future version.\");\n            return new DateTime(DateUtil.toDate(value)).toLocalDate();\n        } else if (Integer.class.equals(collectionType) || Long.class.equals(collectionType) || Float.class.equals(collectionType)\n            || Double.class.equals(collectionType) || BigInteger.class.equals(collectionType)) {\n            return getNumberValue(value.toString(), collectionType);\n        } else if (Boolean.class.equals(collectionType)) {\n            return Boolean.valueOf(value.toString());\n        } else { // Default case String\n            return value;\n        }\n    }\n\n    protected static String removedSurroundingQuotes(String value) {\n        if (value.startsWith(\"\\\"\") && value.endsWith(\"\\\"\")) {\n            return value.substring(1, value.length() - 1);\n        } else {\n            return value;\n        }\n    }","sourceCodeStart":113,"sourceCodeEnd":149,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/DMNParseUtil.java#L113-L149","documentation":"A deprecation WARN from DMNParseUtil.formatElementValue: while formatting an element of a collection whose declared type is the Joda-Time LocalDate, Flowable converts the string value via DateUtil/DateTime to a Joda LocalDate. Joda-Time support is deprecated and will be removed.","triggerScenarios":"A DMN rule input/collection cell declares a Joda LocalDate type (e.g. hit-policy collections with type 'org.joda.time.LocalDate') and its value is parsed with split/formatElementValue.","commonSituations":"Decision tables authored against old Flowable versions that supported Joda types; XML rule definitions referencing org.joda.time.LocalDate in input-parameter types; migrated code still supplying Joda-typed collections.","solutions":["Change the collection element type in the decision table to java.util.Date or java.time.LocalDate.","Migrate variables from org.joda.time.LocalDate to java.time.LocalDate at the call site.","Update decision-table XML type attributes away from Joda class names."],"exampleFix":"// before (DMN table input type)\n<input ... typeRef=\"org.joda.time.LocalDate\" />\n// after\n<input ... typeRef=\"java.time.LocalDate\" />","handlingStrategy":"validation","validationCode":"if (collectionType.getName().startsWith(\"org.joda.time\")) throw new IllegalArgumentException(\"Use java.time types in decision tables\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Declare java.time.LocalDate / java.util.Date typeRefs in DMN XML","Audit decision tables for org.joda.time type references","Migrate persisted variables to java.time"],"tags":["dmn","deprecation","joda-time","date","collection"],"backgroundTag":"deprecated-api-usage","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"}