flowable/flowable-engine · error · FlowableIllegalArgumentException

Variable ' ' has unsupported type: ' '.

Error message

Variable '${name}' has unsupported type: '${type}'.

What it means

DmnRestResponseFactory.getVariableValue throws FlowableIllegalArgumentException when a REST variable specifies a 'type' that has no matching REST variable converter registered. The declared type is not one of the supported REST variable type names.

Solutions

  1. Use a supported REST type name (e.g. string, integer, double, boolean, date) or omit 'type' to let the REST-to-Java mapping infer it.
  2. Check the registered VariableConverter list's getRestTypeName() values for the exact spelling.
  3. Remove the explicit type field and rely on JSON-based inference when possible.
  4. Catch FlowableIllegalArgumentException in the client and surface which variable/type was rejected.

Example fix

// before
{"name": "amount", "value": 5, "type": "long"}
// after
{"name": "amount", "value": 5, "type": "integer"}
Defensive patterns

Strategy: validation

Validate before calling

Set<String> allowed = Set.of("string", "integer", "double", "boolean", "date", "long");
if (variable.getType() != null && !allowed.contains(variable.getType())) {
    throw new IllegalArgumentException("Unsupported REST variable type: " + variable.getType());
}

Try / catch

try {
    response = restTemplate.postForObject(url, request, DmnRuleServiceResponse.class);
} catch (HttpClientErrorException e) {
    logger.error("Variable type rejected: {}", e.getResponseBodyAsString());
}

Prevention

When it happens

Trigger: POSTing a DMN rule execute request whose inputVariables contain a variable with a 'type' field not matching any converter's restTypeName (e.g. "long" instead of "integer", or a custom type).

Common situations: Typos in the type name; using engine type names not exposed via REST; older/newer API versions where supported type names differ; copying payloads between Flowable REST APIs with different type vocabularies.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


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

Appendix: source

Thrown at modules/flowable-dmn-rest/src/main/java/org/flowable/dmn/rest/service/api/DmnRestResponseFactory.java:241

        response.setUrl(urlBuilder.buildUrl(DmnRestUrls.URL_HISTORIC_DECISION_EXECUTION, execution.getId()));

        return response;
    }

    public Object getVariableValue(EngineRestVariable restVariable) {
        Object value = null;

        if (restVariable.getType() != null) {
            // Try locating a converter if the type has been specified
            RestVariableConverter converter = null;
            for (RestVariableConverter conv : variableConverters) {
                if (conv.getRestTypeName().equals(restVariable.getType())) {
                    converter = conv;
                    break;
                }
            }
            if (converter == null) {
                throw new FlowableIllegalArgumentException("Variable '" + restVariable.getName() + "' has unsupported type: '" + restVariable.getType() + "'.");
            }
            value = converter.getVariableValue(restVariable);

        } else {
            // Revert to type determined by REST-to-Java mapping when no
            // explicit type has been provided
            value = restVariable.getValue();
        }
        return value;
    }

    public EngineRestVariable createRestVariable(String name, Object value, boolean includeBinaryValue) {
        return createRestVariable(name, value, includeBinaryValue, createUrlBuilder());
    }

    public EngineRestVariable createRestVariable(String name, Object value, boolean includeBinaryValue, DmnRestUrlBuilder urlBuilder) {

        RestVariableConverter converter = null;

View on GitHub (pinned to d6d39ce1c6)