{"record":{"id":"2e2f4e9deb1969cb","repo":"karatelabs/karate","slug":"removemember-not-implemented-for","errorCode":null,"errorMessage":"removeMember() not implemented for: {} - {}","messagePattern":"removeMember\\(\\) not implemented for: (.+?) - (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"karate-js/src/main/java/io/karatelabs/js/SimpleObject.java","lineNumber":48,"sourceCode":"import java.util.Collection;\nimport java.util.Collections;\nimport java.util.LinkedHashMap;\nimport java.util.Map;\n\npublic interface SimpleObject extends ObjectLike {\n\n    Logger logger = LoggerFactory.getLogger(SimpleObject.class);\n\n    String TO_STRING = \"toString\";\n\n    @Override\n    default void putMember(String name, Object value) {\n        logger.warn(\"putMember() not implemented for: {} - {}\", name, getClass().getName());\n    }\n\n    @Override\n    default void removeMember(String name) {\n        logger.warn(\"removeMember() not implemented for: {} - {}\", name, getClass().getName());\n    }\n\n    @Override\n    default Map<String, Object> toMap() {\n        return toMap(jsKeys(), this);\n    }\n\n    default Collection<String> jsKeys() {\n        logger.warn(\"jsKeys() not implemented for: {}\", getClass().getName());\n        return Collections.emptyList();\n    }\n\n    @Override\n    default Object getMember(String name) {\n        if (TO_STRING.equals(name)) {\n            return jsToString();\n        }\n        return jsGet(name);","sourceCodeStart":30,"sourceCodeEnd":66,"githubUrl":"https://github.com/karatelabs/karate/blob/a22eb90246d958d15a47bf436693d0121ad2812d/karate-js/src/main/java/io/karatelabs/js/SimpleObject.java#L30-L66","documentation":"The SimpleObject default removeMember() only logs this warning and does nothing. Deleting a member (delete obj.foo in JS) on an object that doesn't implement removeMember is silently ignored, so the property remains.","triggerScenarios":"JS delete of a property, or Java-side call to removeMember(name), on a class implementing SimpleObject that relies on the default implementation.","commonSituations":"Trying to mutate immutable/read-only Java-backed objects from JS; expecting built-in objects (like HTTP responses) to support property deletion.","solutions":["Copy the object into a plain Map and mutate that instead","If you own the type, override removeMember(String) to perform the removal","Verify the object type in the warning supports mutation at all"],"exampleFix":"// before\ndelete response.headers['X-Foo']; // no-op with warning\n// after\nvar headers = karate.copy(response.headers);\ndelete headers['X-Foo'];","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"// only delete on plain JS/Map objects\nfunction safeDelete(obj, key) { var map = karate.copy(obj); delete map[key]; return map; }\n","tryCatchPattern":null,"preventionTips":["Copy objects into plain Maps before mutating","Don't rely on delete for Java-backed objects","Override removeMember in your own SimpleObject classes"],"tags":["javascript","java-interop","no-op","warn"],"backgroundTag":"unsupported-operation","analyzedSha":"a22eb90246d958d15a47bf436693d0121ad2812d","analyzedAt":"2026-09-12T09:01:00.220Z","contentChangedAt":"2026-09-12T09:01:00.220Z","schemaVersion":2},"datasetVersion":"2026-09-19T12:17:13.211Z"}