{"record":{"id":"892e7759fef4fcb4","repo":"flowable/flowable-engine","slug":"unsupported-variable-query-operation-friendly","errorCode":null,"errorMessage":"Unsupported variable query operation: \" + friendlyName","messagePattern":"Unsupported variable query operation: \" \\+ friendlyName","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":400,"severity":"error","filePath":"modules/flowable-rest/src/main/java/org/flowable/rest/service/api/engine/variable/QueryVariable.java","lineNumber":94,"sourceCode":"                \"greaterThanOrEquals\"), LESS_THAN(\"lessThan\"), LESS_THAN_OR_EQUALS(\"lessThanOrEquals\"), EXISTS(\"exists\"), NOT_EXISTS(\"notExists\");\n\n        private String friendlyName;\n\n        private QueryVariableOperation(String friendlyName) {\n            this.friendlyName = friendlyName;\n        }\n\n        public String getFriendlyName() {\n            return friendlyName;\n        }\n\n        public static QueryVariableOperation forFriendlyName(String friendlyName) {\n            for (QueryVariableOperation type : values()) {\n                if (type.friendlyName.equals(friendlyName)) {\n                    return type;\n                }\n            }\n            throw new FlowableIllegalArgumentException(\"Unsupported variable query operation: \" + friendlyName);\n        }\n    }\n\n}\n","sourceCodeStart":76,"sourceCodeEnd":99,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/engine/variable/QueryVariable.java#L76-L99","documentation":"QueryVariable.QueryVariableOperation.forFriendlyName resolves a query operation string (e.g. equals, notEquals, like, greaterThan) used in variable query requests to an enum constant. When the supplied friendly name matches none of the enum's friendlyName values, FlowableIllegalArgumentException is thrown.","triggerScenarios":"Building a variable query (task/process variable filtering via REST) with an \"operation\" field that is not one of the enum's defined friendly names, e.g. \"eq\", \">\", \"contains\", or a misspelled value.","commonSituations":"Clients ported from Activiti/older Flowable using different operation names, hand-written JSON query bodies with wrong operation strings, or auto-generated clients using operator symbols instead of the friendly names.","solutions":["Use one of the documented operation names exactly (e.g. equals, notEquals, like, greaterThan, greaterThanOrEquals, lessThan, lessThanOrEquals).","Log the accepted values by inspecting QueryVariableOperation.values() and their friendlyName fields for your Flowable version.","Fix client code or query builder to emit the friendly name, not symbolic operators.","Check for Activiti-to-Flowable migration differences in query operation naming."],"exampleFix":"// before\n{\"name\":\"priority\",\"operation\":\">\",\"value\":50}\n// after\n{\"name\":\"priority\",\"operation\":\"greaterThan\",\"value\":50}","handlingStrategy":"validation","validationCode":"if (operation == null || !List.of(\"equals\",\"notEquals\",\"like\",\"greaterThan\",\"greaterThanOrEquals\",\"lessThan\",\"lessThanOrEquals\").contains(operation)) {\n    throw new IllegalArgumentException(\"Bad operation \" + operation);\n}","typeGuard":null,"tryCatchPattern":"try { query = QueryVariableOperation.forFriendlyName(op); } catch (FlowableIllegalArgumentException e) { /* use a documented friendly name */ }","preventionTips":["Use enum-friendly names, never symbolic operators","Check QueryVariableOperation values for your Flowable version","Watch for Activiti migration renaming operations"],"tags":["flowable","rest","query","invalid-enum"],"backgroundTag":"invalid-enum-value","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}