{"record":{"id":"1fc6b1079c27e448","repo":"apache/cassandra","slug":"unable-to-deserialize-minimum-client-driver-versio","errorCode":null,"errorMessage":"Unable to deserialize minimum_client_driver_versions_disallowed: ","messagePattern":"Unable to deserialize minimum_client_driver_versions_disallowed: ","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/db/guardrails/Guardrails.java","lineNumber":1973,"sourceCode":"        }\n        catch (JsonProcessingException t)\n        {\n            throw new RuntimeException(\"Unable to deserialize payload for minimum_client_driver_versions_warned: \" + t.getMessage());\n        }\n    }\n\n    @Override\n    public void setMinimumClientDriverVersionsDisallowed(String value)\n    {\n        try\n        {\n            Map<String, String> map = JsonUtils.JSON_OBJECT_MAPPER.readValue(value, new TypeReference<>() {});\n            GuardrailsOptions.validateAndSanitizeClientDriverVersions(map, \"minimum_client_driver_versions_disallowed\");\n            DEFAULT_CONFIG.setMinimumClientDriverVersionsDisallowed(map);\n        }\n        catch (JsonProcessingException t)\n        {\n            throw new RuntimeException(\"Unable to deserialize minimum_client_driver_versions_disallowed: \" + t.getMessage());\n        }\n    }\n\n    @Override\n    public boolean getPreparedStatementsRequireParametersWarned()\n    {\n        return DEFAULT_CONFIG.getPreparedStatementsRequireParametersWarned();\n    }\n\n    @Override\n    public boolean getPreparedStatementsRequireParametersEnabled()\n    {\n        return DEFAULT_CONFIG.getPreparedStatementsRequireParametersEnabled();\n    }\n\n    @Override\n    public void setPreparedStatementsRequireParametersWarned(boolean warned)\n    {","sourceCodeStart":1955,"sourceCodeEnd":1991,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/db/guardrails/Guardrails.java#L1955-L1991","documentation":"Thrown when the guardrail property 'minimum_client_driver_versions_disallowed' fails to deserialize from its JSON string into a Map<String,String> via Jackson, or fails validation during GuardrailsOptions.validateAndSanitizeClientDriverVersions with a JsonProcessingException. The original exception is wrapped in a RuntimeException with only Jackson's message appended.","triggerScenarios":"Calling setMinimumClientDriverVersionsDisallowed(String) with a value that is not valid JSON, or valid JSON of a shape other than Map<String,String> (array, scalar, non-string values).","commonSituations":"Automated config tooling emitting YAML-style maps ('key: value') instead of JSON objects; double-escaping issues when setting the value over JMX or in scripts.","solutions":["Ensure the payload is a JSON object with string-to-string entries, e.g. {\"3.0.0\":\"cassandra-driver\"}","Parse-test the string with a JSON linter before applying it","Check the Jackson message after the trailing colon for the exact parse offset","Prefer setting this guardrail in cassandra.yaml where quoting is simpler"],"exampleFix":"// before\nsetMinimumClientDriverVersionsDisallowed(\"{\\\"2.0.0\\\" = \\\"datastax-java-driver\\\"}\");\n// after\nsetMinimumClientDriverVersionsDisallowed(\"{\\\"2.0.0\\\":\\\"datastax-java-driver\\\"}\");","handlingStrategy":"validation","validationCode":"boolean ok(String s) {\n    try {\n        JsonUtils.JSON_OBJECT_MAPPER.readValue(s, new com.fasterxml.jackson.core.type.TypeReference<java.util.Map<String,String>>() {});\n        return true;\n    } catch (Exception e) { return false; }\n}","typeGuard":"boolean isStringToStringMap(String s) {\n    try {\n        java.util.Map<?,?> m = JsonUtils.JSON_OBJECT_MAPPER.readValue(s, java.util.Map.class);\n        return m.values().stream().allMatch(v -> v instanceof String);\n    } catch (Exception e) { return false; }\n}","tryCatchPattern":"try {\n    guardrails.setMinimumClientDriverVersionsDisallowed(json);\n} catch (RuntimeException e) {\n    if (e.getMessage().startsWith(\"Unable to deserialize minimum_client_driver_versions_disallowed\")) {\n        // fix JSON per the embedded Jackson message and retry\n    } else throw e;\n}","preventionTips":["Emit strict JSON (double quotes, no trailing commas) from config tooling","Round-trip the value through the same Jackson mapper used by Cassandra before setting it","Avoid YAML-style 'key: value' syntax when setting guardrail properties"],"tags":["json","guardrails","deserialization","config"],"backgroundTag":"json-unmarshal-failed","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}