{"record":{"id":"5dd47225b29b17b0","repo":"prestodb/presto","slug":"not-found-5dd472","errorCode":"NOT_FOUND","errorMessage":"Configured serializer class not found","messagePattern":"Configured serializer class not found","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"presto-accumulo/src/main/java/com/facebook/presto/accumulo/metadata/AccumuloTable.java","lineNumber":180,"sourceCode":"    public boolean isIndexed()\n    {\n        return indexed;\n    }\n\n    @JsonIgnore\n    public int getRowIdOrdinal()\n    {\n        return this.rowIdOrdinal;\n    }\n\n    @JsonIgnore\n    public AccumuloRowSerializer getSerializerInstance()\n    {\n        try {\n            return (AccumuloRowSerializer) Class.forName(serializerClassName).getConstructor().newInstance();\n        }\n        catch (ClassNotFoundException | InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {\n            throw new PrestoException(NOT_FOUND, \"Configured serializer class not found\", e);\n        }\n    }\n\n    @JsonIgnore\n    public static String getFullTableName(String schema, String table)\n    {\n        return schema.equals(\"default\") ? table : schema + '.' + table;\n    }\n\n    @JsonIgnore\n    public static String getFullTableName(SchemaTableName tableName)\n    {\n        return getFullTableName(tableName.getSchemaName(), tableName.getTableName());\n    }\n\n    @JsonIgnore\n    public SchemaTableName getSchemaTableName()\n    {","sourceCodeStart":162,"sourceCodeEnd":198,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-accumulo/src/main/java/com/facebook/presto/accumulo/metadata/AccumuloTable.java#L162-L198","documentation":"AccumuloTable.getSerializerInstance() reflectively loads and instantiates the serializerClassName configured for the table. If the class cannot be found or constructed (ClassNotFoundException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException), it throws NOT_FOUND. This is the metadata-side twin of the RecordSet factory failure and is hit by the Indexer and AccumuloPageSink.","triggerScenarios":"Calling getSerializerInstance() on an AccumuloTable whose serializerClassName is missing from the classpath, is not an AccumuloRowSerializer, lacks a public no-arg constructor, or whose constructor throws.","commonSituations":"Custom serializer JAR not deployed to coordinator and worker plugin directories; table created with a misspelled or renamed serializer class; class relocated/renamed after a version upgrade so stored metadata now points at a nonexistent class.","solutions":["Deploy the JAR containing the serializer class to the presto-accumulo plugin directory on all nodes and restart","Verify the serializer_class table property/metadata contains the correct fully-qualified class name","Ensure the class is public, extends AccumuloRowSerializer, and has a public no-arg constructor","If the class was renamed, recreate the table metadata (or update ZK metadata) with the new class name"],"exampleFix":"// before\nthrow new PrestoException(NOT_FOUND, \"Configured serializer class not found\", e); // serializerClassName = com.acme.OldRowSerializer (renamed)\n// after\n// update table metadata\nserializerClassName = com.acme.NewRowSerializer; // class deployed to plugin dir, public no-arg ctor","handlingStrategy":"validation","validationCode":"String cls = table.getSerializerClassName();\ntry {\n    Class<?> c = Class.forName(cls);\n    if (!AccumuloRowSerializer.class.isAssignableFrom(c)) {\n        throw new IllegalStateException(cls + \" is not an AccumuloRowSerializer\");\n    }\n    c.getConstructor(); // must have public no-arg ctor\n} catch (Exception e) {\n    throw new IllegalStateException(\"Serializer unusable: \" + cls, e);\n}","typeGuard":"boolean isValidSerializerName(String name) {\n    try {\n        return AccumuloRowSerializer.class.isAssignableFrom(Class.forName(name));\n    } catch (ClassNotFoundException e) { return false; }\n}","tryCatchPattern":"try {\n    AccumuloTable t = metadata.getTable(name);\n    t.getSerializerInstance();\n} catch (PrestoException e) {\n    if (e.getMessage().contains(\"Configured serializer class not found\")) {\n        // deploy JAR to plugin dir or fix serializer_class metadata, then retry\n    }\n    throw e;\n}","preventionTips":["Deploy custom serializer JARs to all Presto nodes' plugin directories","Pin serializer class names; avoid renaming classes referenced by existing table metadata","Validate serializer_class at CREATE TABLE time with a trial instantiation","Extend AccumuloRowSerializer and keep a public no-arg constructor"],"tags":["accumulo","reflection","classpath","serialization"],"backgroundTag":"class-not-found-on-classpath","analyzedSha":"55bb57d202de3b926896fa966c2c4a44c779634e","analyzedAt":"2026-09-04T12:50:26.162Z","contentChangedAt":"2026-09-04T12:50:26.162Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}