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
- 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.
- Check the registered VariableConverter list's getRestTypeName() values for the exact spelling.
- Remove the explicit type field and rely on JSON-based inference when possible.
- 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
- Use documented REST type names only
- Omit the 'type' field to let inference handle it
- Keep client type vocabulary in sync with the Flowable REST version
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
- Decision key is required.
- A group or a user is required to create an identity link.
- A group or a user is required to create an identity link.
- A group or a user is required to create an identity link.
- A request body was expected when bulk updating tasks.
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)