{"record":{"id":"4f920fbc55c91203","repo":"karatelabs/karate","slug":"putmember-not-implemented-for","errorCode":null,"errorMessage":"putMember() not implemented for: {} - {}","messagePattern":"putMember\\(\\) not implemented for: (.+?) - (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"karate-js/src/main/java/io/karatelabs/js/SimpleObject.java","lineNumber":43,"sourceCode":"\nimport io.karatelabs.common.StringUtils;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\n\nimport 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","sourceCodeStart":25,"sourceCodeEnd":61,"githubUrl":"https://github.com/karatelabs/karate/blob/a22eb90246d958d15a47bf436693d0121ad2812d/karate-js/src/main/java/io/karatelabs/js/SimpleObject.java#L25-L61","documentation":"SimpleObject is an interface giving JS-interop objects a default putMember that only logs this warning and discards the value. Writing a member to an object that doesn't implement putMember is silently ignored (at WARN level) rather than throwing, so JS property assignments on such objects have no effect.","triggerScenarios":"JS code assigns a property (obj.foo = 1) on a Java object implementing SimpleObject (or ObjectLike falling back to the default) that does not override putMember.","commonSituations":"Assigning onto built-in/native objects (arrays, responses) from JS; library objects exposed read-only to scripts; users expecting mutable Java-backed objects in karate JS.","solutions":["Don't assign properties on that object — store values in a karate variable or Map instead","If you own the Java type, override putMember(String, Object) to actually store the value","Check the logged class name to identify which object ignores the write"],"exampleFix":"// JS before\nresponse.extra = 'x'; // warn, value discarded\n// after\nkarate.set('extra', 'x');\n// or Java side:\n@Override public void putMember(String name, Object value) { map.put(name, value); }","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"// avoid assigning on non-mutable objects; use a Map instead\nfunction safeAssign(obj, key, val) { if (obj instanceof Java.type('java.util.Map')) obj.put(key, val); else karate.set(key, val); }\n","tryCatchPattern":null,"preventionTips":["Treat SimpleObject-backed values as read-only from JS","Store mutable state in karate variables or Maps","Read the WARN log to identify which class ignored the write"],"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"}