{"record":{"id":"2341a82b87a5271d","repo":"flowable/flowable-engine","slug":"org-flowable-cdi-impl-processvariablemap-containsk","errorCode":null,"errorMessage":"org.flowable.cdi.impl.ProcessVariableMap.containsKey() is not supported.","messagePattern":"org\\.flowable\\.cdi\\.impl\\.ProcessVariableMap\\.containsKey\\(\\) 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":72,"sourceCode":"    public void putAll(Map<? extends String, ? extends Object> m) {\r\n        for (Map.Entry<? extends String, ? extends Object> newEntry : m.entrySet()) {\r\n            businessProcess.setVariable(newEntry.getKey(), newEntry.getValue());\r\n        }\r\n    }\r\n\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","sourceCodeStart":54,"sourceCodeEnd":90,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cdi/src/main/java/org/flowable/cdi/impl/ProcessVariableMap.java#L54-L90","documentation":"ProcessVariableMap.containsKey(Object) throws UnsupportedOperationException unconditionally. Existence of a process variable cannot be checked without engine queries that this read/write keyed view does not perform.","triggerScenarios":"Calling containsKey(name) directly, or delegating utilities (e.g. MapUtils, bean wrappers) that check key presence before get(); serialization frameworks probing the map for known keys.","commonSituations":"Code that distinguishes 'variable is null' from 'variable not set' using containsKey; generic caching layers wrapping the map.","solutions":["Use get(name) != null as a proxy for existence when null values are not meaningful in your process.","Query the engine API (e.g. via BusinessProcess or VariableScope) to check variable existence including null-valued variables.","Never hand this map to utilities that call containsKey."],"exampleFix":"// before\nif (processVariableMap.containsKey(\"myVar\")) { ... }\n\n// after\nif (processVariableMap.get(\"myVar\") != null) { ... }","handlingStrategy":"validation","validationCode":"boolean exists = processVariableMap.get(\"myVar\") != null; // proxy for containsKey when null values are not used","typeGuard":null,"tryCatchPattern":"try { has = processVariableMap.containsKey(name); } catch (UnsupportedOperationException e) { has = processVariableMap.get(name) != null; }","preventionTips":["Use get(name) != null as the existence idiom","If null-valued variables matter, query the engine API instead","Avoid passing this map to helpers that call containsKey"],"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-14T05:17:10.506Z"}