{"record":{"id":"0bac2107c3d69297","repo":"flowable/flowable-engine","slug":"unsupported-variable-query-operation-friendlyna","errorCode":null,"errorMessage":"Unsupported variable query operation: ${friendlyName}","messagePattern":"Unsupported variable query operation: (.+?)","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":400,"severity":"error","filePath":"modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/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 final 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-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/engine/variable/QueryVariable.java#L76-L99","documentation":"QueryVariable.QueryVariableOperation maps friendly operation names (equals, notEquals, like, etc.) used in variable query REST payloads to enum values. forFriendlyName throws FlowableIllegalArgumentException when the supplied string matches no enum constant.","triggerScenarios":"Sending a task/case variable query filter whose \"operation\" field is not one of the supported friendly names (e.g. \"eq\", \"greater\", \"==\" instead of \"equals\", \"greaterThan\").","commonSituations":"Porting clients from other REST APIs with different operator naming; case/whitespace mismatches; new operations used against an older Flowable version that lacks them.","solutions":["Use an exact supported operation name (e.g. equals, notEquals, greaterThan, greaterThanOrEquals, lessThan, lessThanOrEquals, like, in)","Trim/normalize the operation string client-side before sending","Check the Flowable version's QueryVariable enum for available operations when upgrading/downgrading","Update client code or an API mapping layer to translate operator names"],"exampleFix":"// before\n{\"name\":\"priority\",\"operation\":\"eq\",\"value\":10}\n// after\n{\"name\":\"priority\",\"operation\":\"equals\",\"value\":10}","handlingStrategy":"validation","validationCode":"Set<String> ops = Set.of(\"equals\",\"notEquals\",\"greaterThan\",\"greaterThanOrEquals\",\"lessThan\",\"lessThanOrEquals\",\"like\",\"in\");\nif (!ops.contains(operation)) throw new IllegalArgumentException(\"unsupported operation: \" + operation);","typeGuard":null,"tryCatchPattern":"try {\n    QueryVariable.QueryVariableOperation op = QueryVariable.QueryVariableOperation.forFriendlyName(operation);\n} catch (FlowableIllegalArgumentException e) {\n    op = QueryVariable.QueryVariableOperation.EQUALS;\n}","preventionTips":["Map client-side operator enums to Flowable friendly names in one adapter","Never trust raw user input as the operation string","Check the enum in your exact Flowable version before adding new operations"],"tags":["rest","query","enum","validation"],"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-14T05:17:10.506Z"}