{"record":{"id":"8a214655fa3473f3","repo":"pentaho/pentaho-kettle","slug":"unable-to-load-job-entry-of-type-http-from-the-repository","errorCode":null,"errorMessage":"Unable to load job entry of type 'HTTP' from the repository for idJobEntry=","messagePattern":"Unable to load job entry of type 'HTTP' from the repository for idJobEntry=","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/job/entries/http/JobEntryHTTP.java","lineNumber":313,"sourceCode":"      password =\n        Encr.decryptPasswordOptionallyEncrypted( rep.getJobEntryAttributeString( idJobEntry, TAG_PASSWORD ) );\n\n      proxyHostname = rep.getJobEntryAttributeString( idJobEntry, TAG_PROXY_HOST );\n      proxyPort = rep.getJobEntryAttributeString( idJobEntry, TAG_PROXY_PORT ); // backward compatible.\n\n      nonProxyHosts = rep.getJobEntryAttributeString( idJobEntry, TAG_NON_PROXY_HOSTS );\n      addfilenameresult = rep.getJobEntryAttributeBoolean( idJobEntry, TAG_ADD_FILENAME_RESULT );\n\n      // How many headerName?\n      int argnr = rep.countNrJobEntryAttributes( idJobEntry, TAG_HEADER_NAME );\n      allocate( argnr );\n\n      for ( int a = 0; a < argnr; a++ ) {\n        headerName[ a ] = rep.getJobEntryAttributeString( idJobEntry, a, TAG_HEADER_NAME );\n        headerValue[ a ] = rep.getJobEntryAttributeString( idJobEntry, a, TAG_HEADER_VALUE );\n      }\n    } catch ( KettleException dbe ) {\n      throw new KettleException( \"Unable to load job entry of type 'HTTP' from the repository for idJobEntry=\"\n        + idJobEntry, dbe );\n    }\n  }\n\n  @Override\n  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId idJob ) throws KettleException {\n    try {\n      rep.saveJobEntryAttribute( idJob, getObjectId(), TAG_URL, url );\n      rep.saveJobEntryAttribute( idJob, getObjectId(), TAG_TARGET_FILENAME, targetFilename );\n      rep.saveJobEntryAttribute( idJob, getObjectId(), TAG_FILE_APPENDED, fileAppended );\n      rep.saveJobEntryAttribute( idJob, getObjectId(), TAG_DATE_TIME_ADDED, dateTimeAdded );\n      rep.saveJobEntryAttribute( idJob, getObjectId(), TAG_TARGET_FILENAME_EXTENSION, targetFilenameExtension );\n\n      rep.saveJobEntryAttribute( idJob, getObjectId(), TAG_UPLOAD_FILENAME, uploadFilename );\n\n      rep.saveJobEntryAttribute( idJob, getObjectId(), TAG_URL_FIELDNAME, urlFieldname );\n      rep.saveJobEntryAttribute( idJob, getObjectId(), TAG_UPLOAD_FIELDNAME, uploadFieldname );\n      rep.saveJobEntryAttribute( idJob, getObjectId(), TAG_DEST_FIELDNAME, destinationFieldname );","sourceCodeStart":295,"sourceCodeEnd":331,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/job/entries/http/JobEntryHTTP.java#L295-L331","documentation":"Thrown by JobEntryHTTP.loadRep when loading the entry's attributes, including per-row header name/value pairs, from the repository fails with a KettleException. The idJobEntry is appended to the message and the cause chained. It means the 'HTTP' job entry could not be hydrated from the repository.","triggerScenarios":"Calling loadRep on JobEntryHTTP when rep.getJobEntryAttributeString (including indexed reads for header rows via getJobEntryAttributeString(idJobEntry, a, TAG_HEADER_NAME/VALUE)) throws KettleException — DB error, missing attribute rows, or connection loss.","commonSituations":"Repository database unavailable while opening a job; attribute rows for the header counter (nr) missing or inconsistent; repository migration leaving orphaned entries.","solutions":["Examine the chained cause for the underlying repository/database error and fix it.","Verify r_jobentry_attribute rows exist for idJobEntry, including the header rows and their count attribute.","Re-save the HTTP entry in Spoon to regenerate attribute rows.","Restore repository connectivity and retry opening the job."],"exampleFix":"// before\nentry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);\n// after\ntry {\n  entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);\n} catch (KettleException e) {\n  logError(\"HTTP entry load failed for idJobEntry=\" + idJobEntry + \": \" + e.getCause(), e);\n}","handlingStrategy":"try-catch","validationCode":"String url = rep.getJobEntryAttributeString(idJobEntry, \"url\");\nif (url == null) logBasic(\"HTTP entry missing url attribute; rows may be corrupt\");","typeGuard":null,"tryCatchPattern":"try {\n  entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);\n} catch (KettleException e) {\n  logError(\"HTTP entry repository load failed: \" + e.getCause());\n  // restore DB or re-save the entry\n}","preventionTips":["Verify the header count attribute matches the saved header rows.","Keep the repository DB reachable when opening jobs.","Re-save entries after repository migrations.","Back up r_jobentry_attribute before bulk operations."],"tags":["kettle","repository","job-entry","http","persistence"],"backgroundTag":"database-query-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"}