flowable/flowable-engine · warning

Could not parse to Integer, Long, Float or Double from

Error message

Could not parse to Integer, Long, Float or Double from: {}

What it means

A WARN from DMNParseUtil.getNumberValue: a numeric DMN cell value could not be parsed to Integer, Long, Float, Double or BigInteger (NumberFormatException caught). The method returns null for that element, so the rule evaluates with a missing value rather than failing.

Solutions

  1. Fix the cell value to use dot decimal notation and no grouping separators (e.g. 12.5 not 12,5).
  2. Strip whitespace from values in the decision table XML.
  3. Verify the declared input/collection type matches the data actually supplied.
  4. If data comes from an external source, validate/normalize numerics before passing them into DMN execution.

Example fix

// before (DMN cell)
<text>12,5</text>
// after
<text>12.5</text>
Defensive patterns

Strategy: validation

Validate before calling

boolean isNumeric(String s) { return s != null && s.trim().matches("-?\\d+(\\.\\d+)?"); }

Prevention

When it happens

Trigger: A DMN collection cell whose target type is a numeric class contains a non-numeric string such as "12,5", "1 000", "", or "12a" when parsed by formatElementValue.

Common situations: Locale-specific number formatting (comma decimal separator) in decision tables; whitespace or thousands separators in cell values; typos in numeric literal lists for hit policies.

Understand the failure class

Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.

Related errors


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/bcd0b10ce1518253. Report an issue: GitHub.

Appendix: source

Thrown at modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/DMNParseUtil.java:166

        }
    }

    protected static Object getNumberValue(String value, Class<?> targetType) {
        Object returnValue = null;
        try {
            if (Integer.class.equals(targetType)) {
                returnValue = Integer.valueOf(value);
            } else if (Long.class.equals(targetType)) {
                returnValue = Long.valueOf(value);
            } else if (Float.class.equals(targetType)) {
                returnValue = Float.valueOf(value);
            } else if (BigInteger.class.equals(targetType)) {
                returnValue = new BigInteger(value);
            } else { // Default case Double
                returnValue = Double.valueOf(value);
            }
        } catch (NumberFormatException nfe) {
            LOGGER.warn("Could not parse to Integer, Long, Float or Double from: {}", value);
        }

        return returnValue;
    }

    protected static Object getNumberValue(String value) {
        try {
            return Long.parseLong(value);
        } catch (NumberFormatException nfe1) {
            try {
                return Double.parseDouble(value);
            } catch (NumberFormatException nfe2) {
                LOGGER.warn("Could not parse to Long or Double from: {}", value);
                return null;
            }
        }
    }

View on GitHub (pinned to d6d39ce1c6)