pentaho/pentaho-kettle · error · KettleException

TransExecutorDialog.Exception.NoValidMappingDetailsFound

Error message

TransExecutorDialog.Exception.NoValidMappingDetailsFound

What it means

Thrown by TransExecutorDialog.loadTransformation when a transformation path specified for the TransExecutor step cannot be split into a repository directory and a transformation name. The step requires both a non-empty directory part and a non-empty transformation name to locate the child transformation in the repository.

Solutions

  1. Open the TransExecutor step dialog and re-select the transformation from the repository so a full 'directory/transformation' path is stored.
  2. Verify the transformation still exists at the configured repository directory and the path format is '/dir/subdir/name'.
  3. If using a file instead of a repository entry, switch the 'Load from' option to 'File' and pick the .ktr file.
  4. Fix the path in the saved job XML or via the repository browser if the dialog cannot be opened directly.

Example fix

// before (stored path)
transPath = "MyTrans"
// after
transPath = "/public/jobs/MyTrans"
Defensive patterns

Strategy: validation

Validate before calling

int idx = transPath != null ? transPath.lastIndexOf('/') : -1;
String dir = idx > 0 ? transPath.substring(0, idx) : "";
String name = idx != -1 ? transPath.substring(idx + 1) : "";
if (dir.isEmpty() || name.isEmpty()) throw new IllegalArgumentException("Need '/dir/transname', got: " + transPath);

Type guard

boolean isValidRepoPath(String p) { if (p == null) return false; int i = p.lastIndexOf('/'); return i > 0 && i < p.length() - 1; }

Try / catch

try { dialog.loadTransformation(...); } catch (KettleException e) { logError("Invalid TransExecutor repository path: " + e.getMessage(), e); }

Prevention

When it happens

Trigger: The user selected 'TransExecutor transformation in the repository' but the stored transPath string has no '/' separator, or the directory portion before the last '/' is empty, or the transformation name after it is empty.

Common situations: A copied/moved job references a transformation whose path was never re-selected; hand-edited metadata (ktr/kjb XML) with an incomplete repository path; repository export/import that dropped the directory prefix.

Understand the failure class

Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/402a37dc0f133cac. Report an issue: GitHub.

Appendix: source

Thrown at ui/src/main/java/org/pentaho/di/ui/trans/steps/transexecutor/TransExecutorDialog.java:388

          wPath.setText( filename );
        }
        loadFileTrans( filename );
        break;
      case REPOSITORY_BY_NAME:
        if ( Utils.isEmpty( filename ) ) {
          return;
        }
        String transPath = transMeta.environmentSubstitute( filename );
        String realTransname = transPath;
        String realDirectory = "";
        int index = transPath.lastIndexOf( "/" );
        if ( index != -1 ) {
          realTransname = transPath.substring( index + 1 );
          realDirectory = transPath.substring( 0, index );
        }

        if ( Utils.isEmpty( realDirectory ) || Utils.isEmpty( realTransname ) ) {
          throw new KettleException(
            BaseMessages.getString( PKG, "TransExecutorDialog.Exception.NoValidMappingDetailsFound" ) );
        }
        RepositoryDirectoryInterface repdir = repository.findDirectory( realDirectory );
        if ( repdir == null ) {
          throw new KettleException( BaseMessages.getString(
            PKG, "TransExecutorDialog.Exception.UnableToFindRepositoryDirectory" ) );
        }
        loadRepositoryTrans( realTransname, repdir );
        break;
      default:
        break;
    }
  }

  /**
   * Copy information from the meta-data input to the dialog fields.
   */
  public void getData() {

View on GitHub (pinned to f3058517a1)