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

  1. Read the appended KettleException text for the root cause (connection, permissions, or validation) and fix that first.
  2. Test the repository connection (repository connect/test) and re-login if the session expired.
  3. Verify write permissions on the target repository directory, or save to a different directory.
  4. 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

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


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)