flowable/flowable-engine · error · FlowableIllegalArgumentException

Operator ${operator} is not supported for the variable value

Error message

Operator ${operator} is not supported for the variable value

What it means

Thrown by populateQueryVariableValues() when the operator parsed from the JSON falls into the switch's default branch, i.e. it is a valid QueryOperator enum value that the HistoricCaseInstanceQuery variable-value API does not expose (e.g. EQUALS_IGNORE_CASE / NOT_EQUALS_IGNORE_CASE). Notably NOT_EQUALS_IGNORE_CASE is deliberately commented out as not exposed on the public API.

Source

Thrown at modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/BatchDeleteCaseConfig.java:372

                        break;
                    case LIKE_IGNORE_CASE:
                        query.variableValueLikeIgnoreCase(variableName, (String) extractVariableValue(variableValue, engineConfiguration));
                        break;
                    case EQUALS_IGNORE_CASE:
                        query.variableValueEqualsIgnoreCase(variableName, (String) extractVariableValue(variableValue, engineConfiguration));
                        break;
                    case EXISTS:
                        query.variableExists(variableName);
                        break;
                    case NOT_EXISTS:
                        query.variableNotExists(variableName);
                        break;
                    case NOT_EQUALS_IGNORE_CASE:
                        //Not exposed on the public API
                        //query.variableValueNotEqualsIgnoreCase(variableName, (String) extractVariableValue(variableValue, engineConfiguration));
                        //break;
                    default:
                        throw new FlowableIllegalArgumentException("Operator " + operator + " is not supported for the variable value");
                }
            }

        }

    }

    protected static Object extractVariableValue(JsonNode variableValueNode, CmmnEngineConfiguration engineConfiguration) {
        String type = variableValueNode.path("type").stringValue(null);
        if (type == null) {
            throw new FlowableIllegalArgumentException("The variable value does not have a type");
        }

        VariableType variableType = engineConfiguration.getVariableTypes()
                .getVariableType(type);
        return variableType.getValue(new VariableValueJsonNodeValueFields(variableValueNode));
    }

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Use a supported operator such as EQUALS, NOT_EQUALS, GREATER_THAN, GREATER_THAN_OR_EQUALS, LESS_THAN, LESS_THAN_OR_EQUALS, LIKE
  2. Replace unsupported ignore-case operators with EQUALS plus normalized (lowercased) values in the data/query
  3. Update Flowable to a version whose switch handles the operator, if available

Example fix

// before
{"name":"status","operator":"NOT_EQUALS_IGNORE_CASE","value":"closed"}
// after
{"name":"status","operator":"NOT_EQUALS","value":"closed"}
Defensive patterns

Strategy: validation

Validate before calling

EnumSet<QueryOperator> allowed = EnumSet.of(EQUALS, NOT_EQUALS, GREATER_THAN, GREATER_THAN_OR_EQUALS, LESS_THAN, LESS_THAN_OR_EQUALS, LIKE);
if (!allowed.contains(operator)) throw new IllegalArgumentException("operator not supported for historic case query: " + operator);

Type guard

boolean isSupportedOperator(String op) { try { return allowedSet().contains(QueryOperator.valueOf(op)); } catch (Exception e) { return false; } }

Try / catch

try { createBatch(cmd); } catch (FlowableIllegalArgumentException e) { if (e.getMessage().contains("not supported for the variable value")) { log.error("Unsupported operator; use EQUALS/NOT_EQUALS/LIKE etc.", e); } throw e; }

Prevention

When it happens

Trigger: A variable value node in the batch configuration JSON uses operator EQUALS_IGNORE_CASE, NOT_EQUALS_IGNORE_CASE, or another QueryOperator not handled in the switch.

Common situations: Copy-pasting operator names from the QueryOperator enum without checking public API support; batch JSON authored for a runtime query that supports more operators; version drift adding enum values not yet handled.

Related errors


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