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

  1. Change the collection element type in the decision table to java.util.Date or java.time.LocalDate.
  2. Migrate variables from org.joda.time.LocalDate to java.time.LocalDate at the call site.
  3. 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

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


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)