{"record":{"id":"8a46e8db8045e5fc","repo":"pentaho/pentaho-kettle","slug":"unable-to-read-job-entry-interface-information-from","errorCode":null,"errorMessage":"Unable to read job entry interface information from repository","messagePattern":"Unable to read job entry interface information from repository","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/pur/core/src/main/java/org/pentaho/di/repository/pur/JobDelegate.java","lineNumber":404,"sourceCode":"        MissingEntry missingEntry = new MissingEntry( jobMeta.getName(), typeId );\n        jobMeta.addMissingEntry( missingEntry );\n        jobMetaInterface = missingEntry;\n      }\n      jobMetaInterface.setName( name );\n      jobMetaInterface.setDescription( getString( copyNode, PROP_DESCRIPTION ) );\n      jobMetaInterface.setObjectId( new StringObjectId( copyNode.getId().toString() ) );\n      RepositoryProxy proxy = new RepositoryProxy( copyNode.getNode( NODE_CUSTOM ), this.repo );\n\n      jobMetaInterface.setMetaStore( jobMeta.getMetaStore() ); // make sure metastore is passed\n      if ( !isMissing ) {\n        compatibleJobEntryLoadRep( jobMetaInterface, proxy, null, jobMeta.getDatabases(), jobMeta.getSlaveServers() );\n        jobMetaInterface.loadRep( proxy, jobMeta.getMetaStore(), null, jobMeta.getDatabases(), jobMeta\n            .getSlaveServers() );\n      }\n      jobentries.add( jobMetaInterface );\n      return jobMetaInterface;\n    } catch ( Exception e ) {\n      throw new KettleException( \"Unable to read job entry interface information from repository\", e );\n    }\n  }\n\n  @SuppressWarnings( \"deprecation\" )\n  private void compatibleJobEntryLoadRep( JobEntryInterface jobEntry, Repository repository, ObjectId id_jobentry_type,\n      List<DatabaseMeta> databases, List<SlaveServer> slaveServers ) throws KettleException {\n\n    jobEntry.loadRep( repository, id_jobentry_type, databases, slaveServers );\n  }\n\n  public DataNode elementToDataNode( final RepositoryElementInterface element ) throws KettleException {\n    JobMeta jobMeta = (JobMeta) element;\n\n    DataNode rootNode = new DataNode( NODE_JOB );\n\n    // Save the notes\n    //\n    DataNode notesNode = rootNode.addNode( NODE_NOTES );","sourceCodeStart":386,"sourceCodeEnd":422,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/pur/core/src/main/java/org/pentaho/di/repository/pur/JobDelegate.java#L386-L422","documentation":"JobDelegate.readJobEntry loads one job entry (JobEntryInterface) from the repository and calls its loadRep. Any exception during loading or registering the entry is wrapped in a KettleException with this message; the root cause is chained.","triggerScenarios":"jobEntry -> readJobEntry with a job entry whose loadRep throws — typically the job entry type's data is missing/corrupt in the repository, the job entry plugin class is not installed on the client, or loadRep arguments (databases, slave servers) are inconsistent.","commonSituations":"A job was saved with a job-entry plugin that is not installed where the job is loaded; job entry repository data partially written by a failed save; version mismatch between server and client plugin sets.","solutions":["Check the chained cause for the missing plugin class or read failure.","Install/align the missing job entry plugin on the machine loading the job.","Re-save the job from Spoon so the job entry data is rewritten completely.","Verify repository read permissions on the job entry sub-nodes."],"exampleFix":"// before\n} catch ( Exception e ) { throw new KettleException( msg, e ); }\n// after\n} catch ( ClassNotFoundException cnfe ) { throw new KettleException(\"Job entry plugin missing: install it before loading\", cnfe); } catch ( Exception e ) { throw new KettleException( msg, e ); }","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { return readJobEntry(copyNode, jobMeta, jobentries); } catch (KettleException e) { Throwable c = e.getCause(); if (c instanceof ClassNotFoundException) { /* install missing job entry plugin */ } throw e; }","preventionTips":["Install all job entry plugins used by the job on every client","Re-save jobs after upgrading plugin versions","Check cause chain for ClassNotFoundException"],"tags":["pentaho","repository","plugin"],"backgroundTag":"missing-dependency","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}