flowable/flowable-engine · error · FlowableIllegalArgumentException
Value-only query (without a variable-name) is only…
Error message
Value-only query (without a variable-name) is only supported when using 'equals' operation.
What it means
FlowableIllegalArgumentException thrown by addVariables when a query variable has no name (value-only query) but its operation is not EQUALS. Omitting the name means 'match any variable with this value', which Flowable only supports for the equals operator.
Solutions
- Add a "name" to the variable entry when using non-equals operations
- Restrict name-less queries to "variableOperation":"equals"
- Split the query: use equals for the value-only criterion and separate named criteria for other comparisons
Example fix
// before
{"variables":[{"value":"new","variableOperation":"like"}]} // no name -> error
// after
{"variables":[{"name":"status","value":"new","variableOperation":"like"}]} Defensive patterns
Strategy: validation
Validate before calling
if (v.getName() == null && v.getVariableOperation() != QueryVariableOperation.EQUALS) throw new IllegalArgumentException("Nameless variable queries only support equals"); Type guard
boolean isValueOnlyEquals(QueryVariable v) { return v.getName() == null && v.getVariableOperation() == QueryVariableOperation.EQUALS; } Try / catch
try { client.queryProcessInstances(query); } catch (HttpClientErrorException e) { if (e.getResponseBodyAsString().contains("Value-only query")) { /* add a name or switch to equals */ } } Prevention
- Always name variable criteria unless doing an any-variable-equals search
- Constrain query builders to emit value-only filters only for equals
- Document the equals-only rule for nameless queries in team guidelines
When it happens
Trigger: POST /runtime/process-instances/query with a variables entry that has a value and variableOperation like likeNot/greaterThan but "name": null or omitted.
Common situations: Generic query builders that leave name null for value filters; users expecting 'any variable like X' semantics which are unsupported; copy-paste of value-only equals example with a different operation.
Understand the failure class
Background: "Invalid query parameter" / "Failed to parse value of ...": fixing bad query string parameters across APIs — this error's family across 36 libraries.
Related errors
- Only string variable values are supported using like, but…
- Only string variable values are supported when ignoring…
- Unsupported variable query operation:
- Unsupported variable query operation
- Value-only query (without a variable-name) is not supported.
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/023ff9da251135bd.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/BaseProcessInstanceResource.java:295
protected void addVariables(ProcessInstanceQuery processInstanceQuery, List<QueryVariable> variables) {
for (QueryVariable variable : variables) {
if (variable.getVariableOperation() == null) {
throw new FlowableIllegalArgumentException("Variable operation is missing for variable: " + variable.getName());
}
if (variable.getVariableOperation() != QueryVariableOperation.EXISTS && variable.getVariableOperation() != QueryVariableOperation.NOT_EXISTS) {
if (variable.getValue() == null) {
throw new FlowableIllegalArgumentException("Variable value is missing for variable: " + variable.getName());
}
}
boolean nameLess = variable.getName() == null;
Object actualValue = restResponseFactory.getVariableValue(variable);
// A value-only query is only possible using equals-operator
if (nameLess && variable.getVariableOperation() != QueryVariableOperation.EQUALS) {
throw new FlowableIllegalArgumentException("Value-only query (without a variable-name) is only supported when using 'equals' operation.");
}
switch (variable.getVariableOperation()) {
case EQUALS:
if (nameLess) {
processInstanceQuery.variableValueEquals(actualValue);
} else {
processInstanceQuery.variableValueEquals(variable.getName(), actualValue);
}
break;
case EQUALS_IGNORE_CASE:
if (actualValue instanceof String) {
processInstanceQuery.variableValueEqualsIgnoreCase(variable.getName(), (String) actualValue);
} else {
throw new FlowableIllegalArgumentException("Only string variable values are supported when ignoring casing, but was: " + actualValue.getClass().getName());
}View on GitHub (pinned to d6d39ce1c6)