pentaho/pentaho-kettle · error · KettleException
Unable to load job entry of type 'HTTP' from the repository…
Error message
Unable to load job entry of type 'HTTP' from the repository for idJobEntry=
What it means
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.
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.
Example fix
// before
entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
// after
try {
entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
} catch (KettleException e) {
logError("HTTP entry load failed for idJobEntry=" + idJobEntry + ": " + e.getCause(), e);
} Defensive patterns
Strategy: try-catch
Validate before calling
String url = rep.getJobEntryAttributeString(idJobEntry, "url");
if (url == null) logBasic("HTTP entry missing url attribute; rows may be corrupt"); Try / catch
try {
entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
} catch (KettleException e) {
logError("HTTP entry repository load failed: " + e.getCause());
// restore DB or re-save the entry
} Prevention
- 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.
When it happens
Trigger: 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.
Common situations: Repository database unavailable while opening a job; attribute rows for the header counter (nr) missing or inconsistent; repository migration leaving orphaned entries.
Understand the failure class
Background: Database query failed: Internal Server Error 500s wrapping SQL, Prisma, and connection failures — what to check first — this error's family across 16 libraries.
Related errors
- Unable to load job entry of type 'HTTP' to the repository…
- JobEntryMSAccessBulkLoad.Meta.UnableSave
- JobEntrySimple.Error.Exception.UnableLoadRep
- JobFoldersCompare.Meta.UnableLoadRep
- JobFoldersCompare.Meta.UnableSaveRep
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/8a214655fa3473f3.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/http/JobEntryHTTP.java:313
password =
Encr.decryptPasswordOptionallyEncrypted( rep.getJobEntryAttributeString( idJobEntry, TAG_PASSWORD ) );
proxyHostname = rep.getJobEntryAttributeString( idJobEntry, TAG_PROXY_HOST );
proxyPort = rep.getJobEntryAttributeString( idJobEntry, TAG_PROXY_PORT ); // backward compatible.
nonProxyHosts = rep.getJobEntryAttributeString( idJobEntry, TAG_NON_PROXY_HOSTS );
addfilenameresult = rep.getJobEntryAttributeBoolean( idJobEntry, TAG_ADD_FILENAME_RESULT );
// How many headerName?
int argnr = rep.countNrJobEntryAttributes( idJobEntry, TAG_HEADER_NAME );
allocate( argnr );
for ( int a = 0; a < argnr; a++ ) {
headerName[ a ] = rep.getJobEntryAttributeString( idJobEntry, a, TAG_HEADER_NAME );
headerValue[ a ] = rep.getJobEntryAttributeString( idJobEntry, a, TAG_HEADER_VALUE );
}
} catch ( KettleException dbe ) {
throw new KettleException( "Unable to load job entry of type 'HTTP' from the repository for idJobEntry="
+ idJobEntry, dbe );
}
}
@Override
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId idJob ) throws KettleException {
try {
rep.saveJobEntryAttribute( idJob, getObjectId(), TAG_URL, url );
rep.saveJobEntryAttribute( idJob, getObjectId(), TAG_TARGET_FILENAME, targetFilename );
rep.saveJobEntryAttribute( idJob, getObjectId(), TAG_FILE_APPENDED, fileAppended );
rep.saveJobEntryAttribute( idJob, getObjectId(), TAG_DATE_TIME_ADDED, dateTimeAdded );
rep.saveJobEntryAttribute( idJob, getObjectId(), TAG_TARGET_FILENAME_EXTENSION, targetFilenameExtension );
rep.saveJobEntryAttribute( idJob, getObjectId(), TAG_UPLOAD_FILENAME, uploadFilename );
rep.saveJobEntryAttribute( idJob, getObjectId(), TAG_URL_FIELDNAME, urlFieldname );
rep.saveJobEntryAttribute( idJob, getObjectId(), TAG_UPLOAD_FIELDNAME, uploadFieldname );
rep.saveJobEntryAttribute( idJob, getObjectId(), TAG_DEST_FIELDNAME, destinationFieldname );View on GitHub (pinned to f3058517a1)