{"record":{"id":"5070ca70d6725d3d","repo":"flowable/flowable-engine","slug":"processvariablemap-remove-is-unsupported-use-proc","errorCode":null,"errorMessage":"ProcessVariableMap.remove is unsupported. Use ProcessVariableMap.put(key, null)","messagePattern":"ProcessVariableMap\\.remove is unsupported\\. Use ProcessVariableMap\\.put\\(key, null\\)","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"modules/flowable-cdi/src/main/java/org/flowable/cdi/impl/ProcessVariableMap.java","lineNumber":82,"sourceCode":"\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\n    public Collection<Object> values() {\r\n        throw new UnsupportedOperationException(ProcessVariableMap.class.getName() + \".values() is not supported.\");\r\n    }\r\n\r\n    @Override\r","sourceCodeStart":64,"sourceCodeEnd":100,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cdi/src/main/java/org/flowable/cdi/impl/ProcessVariableMap.java#L64-L100","documentation":"ProcessVariableMap.remove(Object) throws UnsupportedOperationException with an explicit remediation hint: setting a variable to null via put(key, null) is the flowable way to delete a process variable, so removal is expressed as a put instead.","triggerScenarios":"Calling remove(name) directly, or using Map.clear()/retainAll-style helpers, or libraries that delete entries from any Map (e.g. removing processed entries).","commonSituations":"Cleanup logic after a variable is consumed; generic Map-manipulation utilities; porting code that used a HashMap and relied on remove().","solutions":["Replace remove(key) with put(key, null) as the exception message instructs.","If BusinessProcess is accessible directly, call setVariable(key, null) to clear the variable.","Keep this map out of generic Map-mutating utility code."],"exampleFix":"// before\nprocessVariableMap.remove(\"tempVar\");\n\n// after\nprocessVariableMap.put(\"tempVar\", null); // setting to null deletes the process variable","handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { processVariableMap.remove(name); } catch (UnsupportedOperationException e) { processVariableMap.put(name, null); }","preventionTips":["Idiomatically delete variables with put(name, null)","Note the exception message: it prescribes put(key, null)","Keep removal logic inside a small helper method so the idiom is used consistently"],"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"}