pentaho/pentaho-kettle · error · InvocationTargetException
TransSaveProgressDialog.Exception.ErrorSavingTransformation
TransSaveProgressDialog.Exception.ErrorSavingTransformation
Error message
TransSaveProgressDialog.Exception.ErrorSavingTransformation
What it means
SaveProgressDialog.run wraps rep.save(...) failures in an InvocationTargetException whose message is the localized string 'TransSaveProgressDialog.Exception.ErrorSavingTransformation' plus the KettleException's toString. It is the UI progress-dialog surface for any repository-level failure while saving a transformation.
Solutions
- Read the appended KettleException text for the root cause (connection, permissions, or validation) and fix that first.
- Test the repository connection (repository connect/test) and re-login if the session expired.
- Verify write permissions on the target repository directory, or save to a different directory.
- If the repository is unavailable, save the transformation locally as a .ktr file instead.
Example fix
// before
rep.save( meta, versionComment, new ProgressMonitorAdapter( monitor ) );
// after: guard connection before save
if ( rep != null && rep.isConnected() ) {
rep.save( meta, versionComment, new ProgressMonitorAdapter( monitor ) );
} else {
throw new KettleException( "Repository is not connected" );
} Defensive patterns
Strategy: try-catch
Validate before calling
if ( rep == null || !rep.isConnected() ) {
throw new KettleException( "Repository is not connected" );
} Try / catch
try {
rep.save( meta, versionComment, monitor );
} catch ( KettleException e ) {
log.logError( "Error saving transformation", e );
// surface e.toString() to the user to expose the root cause
} Prevention
- Check repository connectivity before starting long save operations.
- Ensure the user has write permission in the target repository directory.
- Provide a version comment when the repository requires one.
When it happens
Trigger: Pressing OK on the save progress dialog when rep.save(meta, versionComment, monitor) throws KettleException — e.g. repository connection lost, repository write permission denied, version comment requirements unmet, or the transformation violates repository constraints.
Common situations: Database metadata repository is down or the network dropped mid-save; the user lacks write rights in the target repository directory; an object with the same name/version conflict exists; VFS/IO problems storing the transformation XML.
Related errors
- The number of hops read
- The number of notes read
- TransLoadProgressDialog.Exception.ErrorLoadingTransformation
- Unable to load transformation from path [" + absPath + "]
- Unable to load transformation with id [" + idTransformation…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/35802f464907d7e1.
Report an issue: GitHub.
Appendix: source
Thrown at ui/src/main/java/org/pentaho/di/ui/spoon/dialog/SaveProgressDialog.java:65
/**
* Creates a new dialog that will handle the wait while saving a transformation...
*/
public SaveProgressDialog( Shell shell, Repository rep, EngineMetaInterface meta, String versionComment ) {
this.shell = shell;
this.rep = rep;
this.meta = meta;
this.versionComment = versionComment;
}
public boolean open() {
boolean retval = true;
IRunnableWithProgress op = new IRunnableWithProgress() {
public void run( IProgressMonitor monitor ) throws InvocationTargetException, InterruptedException {
try {
rep.save( meta, versionComment, new ProgressMonitorAdapter( monitor ) );
} catch ( KettleException e ) {
throw new InvocationTargetException( e, BaseMessages.getString(
PKG, "TransSaveProgressDialog.Exception.ErrorSavingTransformation" )
+ e.toString() );
}
}
};
try {
ProgressMonitorDialog pmd = new ProgressMonitorDialog( shell );
pmd.run( true, true, op );
} catch ( InvocationTargetException e ) {
MessageDialog errorDialog =
new MessageDialog( shell, BaseMessages.getString( PKG, "TransSaveProgressDialog.UnableToSave.DialogTitle" ), null,
BaseMessages.getString( PKG, "TransSaveProgressDialog.UnableToSave.DialogMessage" ), MessageDialog.ERROR,
new String[] { BaseMessages.getString( PKG, "TransSaveProgressDialog.UnableToSave.Close" ) }, 0 );
errorDialog.open();
retval = false;
} catch ( InterruptedException e ) {
new ErrorDialog( shell,View on GitHub (pinned to f3058517a1)