{"record":{"id":"5ddb7d281b590849","repo":"flowable/flowable-engine","slug":"org-flowable-cdi-impl-processvariablemap-containsv","errorCode":null,"errorMessage":"org.flowable.cdi.impl.ProcessVariableMap.containsValue() is not supported.","messagePattern":"org\\.flowable\\.cdi\\.impl\\.ProcessVariableMap\\.containsValue\\(\\) is not supported\\.","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"modules/flowable-cdi/src/main/java/org/flowable/cdi/impl/ProcessVariableMap.java","lineNumber":77,"sourceCode":"\r\n    @Override\r\n    public int size() {\r\n        throw new UnsupportedOperationException(ProcessVariableMap.class.getName() + \".size() is not supported.\");\r\n    }\r\n\r\n    @Override\r\n    public boolean isEmpty() {\r\n        throw new UnsupportedOperationException(ProcessVariableMap.class.getName() + \".isEmpty() is not supported.\");\r\n    }\r\n\r\n    @Override\r\n    public boolean containsKey(Object key) {\r\n        throw new UnsupportedOperationException(ProcessVariableMap.class.getName() + \".containsKey() is not supported.\");\r\n    }\r\n\r\n    @Override\r\n    public boolean containsValue(Object value) {\r\n        throw new UnsupportedOperationException(ProcessVariableMap.class.getName() + \".containsValue() is not supported.\");\r\n    }\r\n\r\n    @Override\r\n    public Object remove(Object key) {\r\n        throw new UnsupportedOperationException(\"ProcessVariableMap.remove is unsupported. Use ProcessVariableMap.put(key, null)\");\r\n    }\r\n\r\n    @Override\r\n    public void clear() {\r\n        throw new UnsupportedOperationException(ProcessVariableMap.class.getName() + \".clear() is not supported.\");\r\n    }\r\n\r\n    @Override\r\n    public Set<String> keySet() {\r\n        throw new UnsupportedOperationException(ProcessVariableMap.class.getName() + \".keySet() is not supported.\");\r\n    }\r\n\r\n    @Override\r","sourceCodeStart":59,"sourceCodeEnd":95,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cdi/src/main/java/org/flowable/cdi/impl/ProcessVariableMap.java#L59-L95","documentation":"ProcessVariableMap.containsValue(Object) throws UnsupportedOperationException unconditionally. Scanning all process variables by value would require full variable enumeration, which the map view does not implement.","triggerScenarios":"Calling containsValue(x) directly; helper libraries that use containsValue for reverse lookups or de-duplication before inserting into a Map.","commonSituations":"Generic code that prevents duplicate values across any Map; diagnostics code searching which variable holds a given value.","solutions":["Use get(name) for the specific variables you care about and compare values yourself.","Enumerate variables via the process engine query API instead of the CDI map.","Rewrite the check to be name-based rather than value-based."],"exampleFix":"// before\nboolean hasCustomer = processVariableMap.containsValue(customer);\n\n// after\nboolean hasCustomer = customer.equals(processVariableMap.get(\"customerVar\"));","handlingStrategy":"validation","validationCode":"// value lookup must be name-based\nboolean hasCustomer = Objects.equals(customer, processVariableMap.get(\"customerVar\"));","typeGuard":null,"tryCatchPattern":"try { has = processVariableMap.containsValue(v); } catch (UnsupportedOperationException e) { /* fall back to per-name get comparisons */ }","preventionTips":["Design lookups around variable names, not values","Use engine variable queries for value-based searches","Do not use reverse-lookup Map helpers on this map"],"tags":["java","cdi","unsupported-operation","map"],"backgroundTag":"unsupported-operation","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}