{"record":{"id":"0a0a0059b0e30de4","repo":"apache/cassandra","slug":"e-getmessage-0a0a00","errorCode":null,"errorMessage":"e.getMessage()","messagePattern":"e\\.getMessage\\(\\)","errorType":"exception","errorClass":"org.apache.cassandra.transport.ProtocolException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/transport/DataType.java","lineNumber":325,"sourceCode":"                    return TypeParser.parse((String)entry.right);\n                case LIST:\n                    return ListType.getInstance((AbstractType)entry.right, true);\n                case SET:\n                    return SetType.getInstance((AbstractType)entry.right, true);\n                case MAP:\n                    List<AbstractType> l = (List<AbstractType>)entry.right;\n                    return MapType.getInstance(l.get(0), l.get(1), true);\n                case UDT:\n                    return (AbstractType)entry.right;\n                case TUPLE:\n                    return (AbstractType)entry.right;\n                default:\n                    return entry.left.type;\n            }\n        }\n        catch (RequestValidationException e)\n        {\n            throw new ProtocolException(e.getMessage());\n        }\n    }\n\n    @VisibleForTesting\n    public ProtocolVersion getProtocolVersion()\n    {\n        return protocolVersion;\n    }\n\n    public static final class Codec\n    {\n        private final DataType[] ids;\n\n        public Codec()\n        {\n            DataType[] values = DataType.values();\n            ids = new DataType[getMaxId(values) + 1];\n            for (DataType opt : values)","sourceCodeStart":307,"sourceCodeEnd":343,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/transport/DataType.java#L307-L343","documentation":"While mapping a serialized data type code back to a DataType, the server encountered a code it cannot resolve to a concrete type; the underlying RequestValidationException's message is rethrown as a ProtocolException. This happens during parsing of metadata (e.g. prepared-statement result metadata or UDT/collection type specs).","triggerScenarios":"A client sends type metadata (custom type name or option code) in EXECUTE/PREPARE-adjacent payloads that the server cannot resolve to a registered DataType.","commonSituations":"Client and server protocol-version mismatches where a type encoding differs; custom class names no longer on the server classpath (removed custom types); UDTs referencing unknown types.","solutions":["Use a protocol version supported by both client and server (negotiate down if a type encoding is unknown).","Remove or re-create schema referencing custom/CUSTOM type classes that are not installed on the server.","Re-prepare statements after schema changes so the client receives fresh metadata.","Upgrade the client driver so its type-code table matches the server version."],"exampleFix":"// before: client forces unsupported version\ncluster.setProtocolVersion(ProtocolVersion.V3);\n// after: let the driver negotiate\ncluster = Cluster.builder().addContactPoint(host).build(); // auto-negotiation","handlingStrategy":"try-catch","validationCode":"// verify type codes used in metadata are supported by the negotiated protocol version\nif (!protocolVersion.isSupportedBy(serverVersion))\n    downgradeProtocol();","typeGuard":"null","tryCatchPattern":"try { session.prepare(cql); } catch (ProtocolException e) {\n    // re-prepare with a lower protocol version or refresh cluster metadata\n    session.close(); cluster = rebuildWithLowerProtocolVersion();\n}","preventionTips":["Let the driver auto-negotiate the protocol version instead of pinning one.","Re-prepare statements after server upgrades or schema changes.","Avoid CUSTOM types referencing classes not on the server classpath.","Keep client driver and server versions aligned."],"tags":["protocol","types","metadata","cql-native-protocol"],"backgroundTag":"schema-validation-failed","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}