pentaho/pentaho-kettle · error · KettleException
Unable to load job entry of type 'DTDvalidator' from the…
Error message
Unable to load job entry of type 'DTDvalidator' from the repository for id_jobentry=${id_jobentry} What it means
JobEntryDTDValidator.loadRep() failed while reading the entry's attributes (xmlfilename, dtdfilename, dtdintern) from a repository by id_jobentry. The underlying KettleException from the repository access layer is wrapped and rethrown with this message.
Solutions
- Check repository database connectivity and credentials
- Verify the job entry rows exist (r_jobentry / r_jobentry_attribute) for the given id_jobentry
- Clear the repository cache (clear repository object cache) and retry
- Migrate/upgrade the repository schema to match the PDI version
Defensive patterns
Strategy: try-catch
Validate before calling
// check the entry rows exist before load // SELECT COUNT(*) FROM r_jobentry_attribute WHERE id_jobentry = ?; // must return the expected attribute rows
Try / catch
try {
jobMeta.loadRep( rep, metaStore, jobId, null, null );
} catch ( KettleException e ) {
if ( e.getMessage().contains( "DTDvalidator" ) && e.getMessage().contains( "id_jobentry" ) ) {
logError( "Repository rows for DTDvalidator entry are missing/corrupt: " + e.getCause() );
} else { throw e; }
} Prevention
- Keep the repository database reachable and monitored
- Avoid direct deletes on repository tables; use Spoon/PDI tooling
- Run repository integrity checks after version migrations
- Clear the repository cache after out-of-band repository changes
When it happens
Trigger: loadRep() calls rep.getJobEntryAttributeString/Boolean for id_jobentry and the repository throws KettleException — DB connectivity issues, missing rows in repository tables, or repository schema mismatch.
Common situations: Repository database down or network problem; job entry rows deleted/corrupted in the repository; loading a repository object created by an incompatible PDI version; stale repository cache.
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
- JobXMLWellFormed.Error.Exception.UnableLoadRep + id_jobentry
- JobEntryCheckFilesLocked.UnableToLoadFromRepo
- JobEntryCheckFilesLocked.UnableToSaveToRepo
- JobEntryColumnsExist.Meta.UnableLoadRep
- JobEntryColumnsExist.Meta.UnableSaveRep
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/f854a779923f632c.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/xml/core/src/main/java/org/pentaho/di/job/entries/dtdvalidator/JobEntryDTDValidator.java:113
super.loadXML( entrynode, databases, slaveServers );
xmlfilename = XMLHandler.getTagValue( entrynode, "xmlfilename" );
dtdfilename = XMLHandler.getTagValue( entrynode, "dtdfilename" );
dtdintern = "Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "dtdintern" ) );
} catch ( KettleXMLException xe ) {
throw new KettleXMLException( "Unable to load job entry of type 'DTDvalidator' from XML node", xe );
}
}
public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
List<SlaveServer> slaveServers ) throws KettleException {
try {
xmlfilename = rep.getJobEntryAttributeString( id_jobentry, "xmlfilename" );
dtdfilename = rep.getJobEntryAttributeString( id_jobentry, "dtdfilename" );
dtdintern = rep.getJobEntryAttributeBoolean( id_jobentry, "dtdintern" );
} catch ( KettleException dbe ) {
throw new KettleException( "Unable to load job entry of type 'DTDvalidator' from the repository for id_jobentry="
+ id_jobentry, dbe );
}
}
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
try {
rep.saveJobEntryAttribute( id_job, getObjectId(), "xmlfilename", xmlfilename );
rep.saveJobEntryAttribute( id_job, getObjectId(), "dtdfilename", dtdfilename );
rep.saveJobEntryAttribute( id_job, getObjectId(), "dtdintern", dtdintern );
} catch ( KettleDatabaseException dbe ) {
throw new KettleException( "Unable to save job entry of type 'DTDvalidator' to the repository for id_job="
+ id_job, dbe );
}
}
public String getRealxmlfilename() {
return environmentSubstitute( xmlfilename );
}View on GitHub (pinned to f3058517a1)