pentaho/pentaho-kettle · error · KettleException
Unable to save job entry of type 'xslt' to the repository…
Error message
Unable to save job entry of type 'xslt' to the repository for id_job=<id_job>
What it means
JobEntryXSLT.saveRep rethrows KettleException when writing the entry's attributes, including per-index output_property_name/output_property_value rows, to the repository fails with a KettleDatabaseException.
Solutions
- Read the wrapped KettleDatabaseException for the SQL error
- Check repository connectivity and disk space
- Verify write privileges on the repository
- Reduce or shorten output property names/values if column 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
- Verify repository write privileges before saving
- Watch for DB outages and retry transient failures
- Keep output property names/values within column limits
- Use a dedicated writable repository account
When it happens
Trigger: Saving a job with an XSLT entry where any rep.saveJobEntryAttribute call (including the output-property loop) throws KettleDatabaseException.
Common situations: Repository DB connection dropped during save; constraint or column-length violations; read-only repository user; very many output properties.
Related errors
- JobCopyFiles.Error.Exception.UnableSaveRep
- JobEntryCopyMoveResultFilenames.CanNotSaveToRep
- MonetDBBulkLoaderMeta.Exception.UnableToSaveStepInfoToRepository
- Unable to load job entry of type 'xslt' from the repository…
- Unable to save job entry of type 'create file' to the…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/b2726c1815ba0739.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/xml/core/src/main/java/org/pentaho/di/job/entries/xslt/JobEntryXSLT.java:289
try {
rep.saveJobEntryAttribute( id_job, getObjectId(), "xmlfilename", xmlfilename );
rep.saveJobEntryAttribute( id_job, getObjectId(), "xslfilename", xslfilename );
rep.saveJobEntryAttribute( id_job, getObjectId(), "outputfilename", outputfilename );
rep.saveJobEntryAttribute( id_job, getObjectId(), "iffileexists", iffileexists );
rep.saveJobEntryAttribute( id_job, getObjectId(), "addfiletoresult", addfiletoresult );
rep.saveJobEntryAttribute( id_job, getObjectId(), "filenamesfromprevious", filenamesfromprevious );
rep.saveJobEntryAttribute( id_job, getObjectId(), "xsltfactory", xsltfactory );
for ( int i = 0; i < parameterName.length; i++ ) {
rep.saveJobEntryAttribute( id_job, getObjectId(), i, "param_field", parameterField[i] );
rep.saveJobEntryAttribute( id_job, getObjectId(), i, "param_name", parameterName[i] );
}
for ( int i = 0; i < outputPropertyName.length; i++ ) {
rep.saveJobEntryAttribute( id_job, getObjectId(), i, "output_property_name", outputPropertyName[i] );
rep.saveJobEntryAttribute( id_job, getObjectId(), i, "output_property_value", outputPropertyValue[i] );
}
} catch ( KettleDatabaseException dbe ) {
throw new KettleException( "Unable to save job entry of type 'xslt' to the repository for id_job=" + id_job, dbe );
}
}
public String getXSLTFactory() {
return xsltfactory;
}
public void setXSLTFactory( String xsltfactoryin ) {
xsltfactory = xsltfactoryin;
}
public String getRealxmlfilename() {
return environmentSubstitute( getxmlFilename() );
}
public String getoutputfilename() {
return environmentSubstitute( getoutputFilename() );
}View on GitHub (pinned to f3058517a1)