{"record":{"id":"fb67b009926c5cc7","repo":"apache/cassandra","slug":"invalid-null-element-in-list","errorCode":null,"errorMessage":"Invalid null element in list","messagePattern":"Invalid null element in list","errorType":"validation","errorClass":"MarshalException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/db/marshal/ListType.java","lineNumber":249,"sourceCode":"        return bbs;\n    }\n\n    @Override\n    public Term fromJSONObject(Object parsed) throws MarshalException\n    {\n        if (parsed instanceof String)\n            parsed = JsonUtils.decodeJson((String) parsed);\n\n        if (!(parsed instanceof List))\n            throw new MarshalException(String.format(\n                    \"Expected a list, but got a %s: %s\", parsed.getClass().getSimpleName(), parsed));\n\n        List<?> list = (List<?>) parsed;\n        List<Term> terms = new ArrayList<>(list.size());\n        for (Object element : list)\n        {\n            if (element == null)\n                throw new MarshalException(\"Invalid null element in list\");\n            terms.add(elements.fromJSONObject(element));\n        }\n\n        return new MultiElements.DelayedValue(this, terms);\n    }\n\n    public ByteBuffer getSliceFromSerialized(ByteBuffer collection, ByteBuffer from, ByteBuffer to)\n    {\n        // We don't support slicing on lists so we don't need that function\n        throw new UnsupportedOperationException();\n    }\n\n    @Override\n    public String toJSONString(ByteBuffer buffer, ProtocolVersion protocolVersion)\n    {\n        return setOrListToJsonString(buffer, elements, protocolVersion);\n    }\n","sourceCodeStart":231,"sourceCodeEnd":267,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/db/marshal/ListType.java#L231-L267","documentation":"While converting a JSON array for a list column, each element is recursively converted via the element type's fromJSONObject. Cassandra does not allow null elements inside collections, so a JSON null element immediately raises MarshalException.","triggerScenarios":"fromJSONObject called with a JSON array containing null, e.g. {\"tags\": [\"a\", null]}.","commonSituations":"JavaScript clients with undefined values serialized as null; sparse data merged into arrays; deserialization frameworks that fill missing entries with null.","solutions":["Remove null entries from the array before sending.","Replace null with a sentinel/default value if the schema requires fixed positions.","Filter nulls in application code or the producer's serialization layer."],"exampleFix":"// before\n{\"scores\": [1, null, 3]}\n// after\n{\"scores\": [1, 3]}","handlingStrategy":"validation","validationCode":"boolean hasNull = ((List<?>) value).stream().anyMatch(Objects::isNull);\nif (hasNull) throw new IllegalArgumentException(\"Cassandra collections do not allow null elements\");","typeGuard":null,"tryCatchPattern":"try { term = listType.fromJSONObject(parsed); } catch (MarshalException e) { log.warn(\"List contained nulls\"); parsed = stripNulls(parsed); }","preventionTips":["Filter nulls from arrays before sending to Cassandra.","Configure serializers to omit null entries rather than emitting JSON null.","Remember this applies to all collections (list, set, map) in Cassandra."],"tags":["json","list","null","validation"],"backgroundTag":"null-argument","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"}