{"record":{"id":"035122798b304d7e","repo":"pentaho/pentaho-kettle","slug":"error-loading-job-details","errorCode":null,"errorMessage":"Error loading job details","messagePattern":"Error loading job details","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/pur/core/src/main/java/org/pentaho/di/repository/pur/JobDelegate.java","lineNumber":361,"sourceCode":"      jobMeta.getJobLogTable().setBatchIdUsed( rootNode.getProperty( PROP_USE_BATCH_ID ).getBoolean() );\n      jobMeta.setBatchIdPassed( rootNode.getProperty( PROP_PASS_BATCH_ID ).getBoolean() );\n      jobMeta.getJobLogTable().setLogFieldUsed( rootNode.getProperty( PROP_USE_LOGFIELD ).getBoolean() );\n\n      jobMeta.getJobLogTable().setLogSizeLimit( getString( rootNode, PROP_LOG_SIZE_LIMIT ) );\n\n      // Load the logging tables too..\n      //\n      RepositoryAttributeInterface attributeInterface = new PurRepositoryAttribute( rootNode, jobMeta.getDatabases() );\n      for ( LogTableInterface logTable : jobMeta.getLogTables() ) {\n        logTable.loadFromRepository( attributeInterface );\n      }\n\n      // Load the attributes map\n      //\n      AttributesMapUtil.loadAttributesMap( rootNode, jobMeta );\n\n    } catch ( Exception e ) {\n      throw new KettleException( \"Error loading job details\", e );\n    }\n  }\n\n  protected JobEntryInterface readJobEntry( DataNode copyNode, JobMeta jobMeta, List<JobEntryInterface> jobentries )\n    throws KettleException {\n    try {\n      String name = getString( copyNode, PROP_NAME );\n      for ( JobEntryInterface entry : jobentries ) {\n        if ( entry.getName().equalsIgnoreCase( name ) ) {\n          return entry; // already loaded!\n        }\n      }\n\n      // load the entry from the node\n      //\n      String typeId = getString( copyNode, PROP_JOBENTRY_TYPE );\n\n      PluginRegistry registry = PluginRegistry.getInstance();","sourceCodeStart":343,"sourceCodeEnd":379,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/pur/core/src/main/java/org/pentaho/di/repository/pur/JobDelegate.java#L343-L379","documentation":"JobDelegate.loadJobMetaDetails loads a JobMeta (job metadata) from the Pentaho repository via the unified JCR data node. Any failure while reading the job's root node attributes map (AttributesMapUtil.loadAttributesMap) is wrapped in a KettleException with this message, with the real cause chained.","triggerScenarios":"Calling repository.loadJob(...) for a job whose data node is corrupt, missing required attributes, unreadable due to permissions, or whose repository (PUR) connection fails mid-read; dataNodeToElement -> loadJobMetaDetails -> AttributesMapUtil.loadAttributesMap throws.","commonSituations":"Corrupted job files in the BA Server repository; the connected user lacks read permission on the job file; transient ESR/JCR backend errors; repository upgraded to a schema version the client cannot parse.","solutions":["Inspect the chained cause (e.getCause()) to find the real failure (permissions, corrupt node, connection).","Verify the user has read access to the job file in the Pentaho repository.","Re-open/re-export the job in Spoon to repair a corrupt attributes map; if unrepairable, recreate and re-save the job.","Check PUR client/server version compatibility (client plugin vs BA Server version)."],"exampleFix":"// before\nKettleException e = ...; log.error(e.getMessage());\n// after\ntry { jobMeta = repo.loadJob(id, null); } catch (KettleException e) { log.error(\"load failed, cause: \", e.getCause()); }","handlingStrategy":"try-catch","validationCode":"if (jobId == null) throw new IllegalArgumentException(\"job id required\"); if (!repo.getJobIdListByDirectory(dir).contains(jobId)) throw new IllegalStateException(\"job not accessible: \" + jobId);","typeGuard":null,"tryCatchPattern":"try { jobMeta = repo.loadJob(id, null); } catch (KettleException e) { log.error(\"job load failed: {}\", e.getCause() != null ? e.getCause().getMessage() : e.getMessage(), e); throw e; }","preventionTips":["Always log the chained cause, not just the wrapper message","Verify repository read permissions before loading","Keep PUR client plugin and BA Server versions aligned"],"tags":["pentaho","repository","kettle"],"backgroundTag":"file-read-failed","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"}