pentaho/pentaho-kettle · error · KettleException
Unable to save job entry of type 'xsdvalidator' to the…
Error message
Unable to save job entry of type 'xsdvalidator' to the repository for id_job=<id_job>
What it means
JobEntryXSDValidator.saveRep rethrows KettleException when saving the entry's attributes (xmlfilename, xsdfilename, allowExternalEntities) to the repository fails with a KettleDatabaseException. The database cause is preserved in the chain.
Solutions
- Read the wrapped KettleDatabaseException for the SQL-level error
- Check repository database connectivity and disk space
- Verify the repository user has write privileges
- Shorten the configured filenames if column length limits are hit
Defensive patterns
Strategy: try-catch
Try / catch
try {
entry.saveRep( rep, metaStore, id_job );
} catch ( KettleException e ) {
logError( "Repository save failed for id_job=" + id_job + ": " + e.getCause(), e );
throw e;
} Prevention
- Ensure the repository user has write access
- Monitor repository DB disk space and connectivity
- Keep attribute values within column length limits
- Retry saves after transient DB failures
When it happens
Trigger: Saving a job containing an xsdvalidator entry where rep.saveJobEntryAttribute throws KettleDatabaseException.
Common situations: Repository DB connection lost mid-save; disk full or constraint violation on the repository; read-only repository; value too long for the attribute column.
Related errors
- JobCopyFiles.Error.Exception.UnableSaveRep
- JobEntryCopyMoveResultFilenames.CanNotSaveToRep
- JobEntryMSAccessBulkLoad.Meta.UnableSave
- JobXMLWellFormed.Error.Exception.UnableSaveRep + id_job
- MonetDBBulkLoaderMeta.Exception.UnableToSaveStepInfoToRepository
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/2bf036c7b6d17ac8.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/xml/core/src/main/java/org/pentaho/di/job/entries/xsdvalidator/JobEntryXSDValidator.java:144
try {
xmlfilename = rep.getJobEntryAttributeString( id_jobentry, "xmlfilename" );
xsdfilename = rep.getJobEntryAttributeString( id_jobentry, "xsdfilename" );
allowExternalEntities =
Boolean.parseBoolean( rep.getJobEntryAttributeString( id_jobentry, "allowExternalEntities" ) );
} catch ( KettleException dbe ) {
throw new KettleException( "Unable to load job entry of type 'xsdvalidator' 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(), "xsdfilename", xsdfilename );
rep.saveJobEntryAttribute( id_job, getObjectId(), "allowExternalEntities", allowExternalEntities );
} catch ( KettleDatabaseException dbe ) {
throw new KettleException( "Unable to save job entry of type 'xsdvalidator' to the repository for id_job="
+ id_job, dbe );
}
}
public String getRealxmlfilename() {
return environmentSubstitute( getxmlFilename() );
}
public String getRealxsdfilename() {
return environmentSubstitute( getxsdFilename() );
}
public Result execute( Result previousResult, int nr ) {
Result result = previousResult;
result.setResult( false );
String realxmlfilename = getRealxmlfilename();
String realxsdfilename = getRealxsdfilename();View on GitHub (pinned to f3058517a1)