flowable/flowable-engine · warning

Could not parse to Long or Double from

Error message

Could not parse to Long or Double from: {}

What it means

A WARN from the two-argument getNumberValue in DMNParseUtil: the value string failed both Long.parseLong and Double.parseDouble, so null is returned. The calling DMN evaluation continues with a missing numeric element.

Solutions

  1. Correct the value in the decision table to a valid Long or Double literal.
  2. Remove empty/placeholder cells or give the cell an explicit matching type.
  3. Normalize input (trim, replace ',' with '.') before DMN execution when data originates externally.

Example fix

// before
<text>N/A</text>
// after
<text>0</text>
Defensive patterns

Strategy: validation

Validate before calling

boolean parseable(String s) { try { Long.parseLong(s.trim()); return true; } catch (Exception e) { try { Double.parseDouble(s.trim()); return true; } catch (Exception e2) { return false; } } }

Prevention

When it happens

Trigger: formatElementValue is asked to format a value for an unspecified numeric target type (not Integer/Float/etc.), and the string is non-numeric (e.g. "N/A", "12,5", empty).

Common situations: Spreadsheet/CSV-imported decision tables with blank or textual cells typed as numbers; locale decimal commas; null-ish placeholders like '-' or 'null' in cells.

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/946065d23b6c4251. Report an issue: GitHub.

Appendix: source

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

                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;
            }
        }
    }

    protected static Class<?> getTargetType(Object targetTypeObject) {
        if (targetTypeObject == null) {
            return null;
        }

        if (isJavaCollection(targetTypeObject)) {
            if (((Collection) targetTypeObject).isEmpty()) {
                return null;
            }
            return ((Collection) targetTypeObject).iterator().next().getClass();
        } else {
            return targetTypeObject.getClass();
        }

View on GitHub (pinned to d6d39ce1c6)