flowable/flowable-engine · warning
Using Joda-Time LocalDate has been deprecated and will be…
Error message
Using Joda-Time LocalDate has been deprecated and will be removed in a future version.
What it means
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.
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.
Example fix
// before (DMN table input type) <input ... typeRef="org.joda.time.LocalDate" /> // after <input ... typeRef="java.time.LocalDate" />
Defensive patterns
Strategy: validation
Validate before calling
if (collectionType.getName().startsWith("org.joda.time")) throw new IllegalArgumentException("Use java.time types in decision tables"); Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Understand the failure class
Background: "is deprecated and will be removed" — deprecation warnings for old API names, keywords, and options, and how to migrate before the removal release — this error's family across 29 libraries.
Related errors
- Using Joda-Time LocalDate has been deprecated and will be…
- Using Joda-Time LocalDate has been deprecated and will be…
- Could not parse to Integer, Long, Float or Double from
- date object cannot be empty
- Json Node is not supported
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/95290f2ac2e39bd6.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/DMNParseUtil.java:131
protected static Object getFormattedValue(Object value, Object inputCollection) {
Class<?> collectionType = getTargetType(inputCollection);
return formatElementValue(value, collectionType);
}
protected static Object formatElementValue(Object value, Class<?> collectionType) {
if (value instanceof String stringValue) {
if (stringValue.isEmpty()) {
return null;
}
value = removedSurroundingQuotes(stringValue);
}
// format element based on collection type
if (Date.class.equals(collectionType)) {
return DateUtil.toDate(value);
} else if (LocalDate.class.equals(collectionType)) {
JodaDeprecationLogger.LOGGER.warn("Using Joda-Time LocalDate has been deprecated and will be removed in a future version.");
return new DateTime(DateUtil.toDate(value)).toLocalDate();
} else if (Integer.class.equals(collectionType) || Long.class.equals(collectionType) || Float.class.equals(collectionType)
|| Double.class.equals(collectionType) || BigInteger.class.equals(collectionType)) {
return getNumberValue(value.toString(), collectionType);
} else if (Boolean.class.equals(collectionType)) {
return Boolean.valueOf(value.toString());
} else { // Default case String
return value;
}
}
protected static String removedSurroundingQuotes(String value) {
if (value.startsWith("\"") && value.endsWith("\"")) {
return value.substring(1, value.length() - 1);
} else {
return value;
}
}View on GitHub (pinned to d6d39ce1c6)