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
- Open the TransExecutor step dialog and re-select the transformation from the repository so a full 'directory/transformation' path is stored.
- Verify the transformation still exists at the configured repository directory and the path format is '/dir/subdir/name'.
- If using a file instead of a repository entry, switch the 'Load from' option to 'File' and pick the .ktr file.
- 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
- Always select transformations via the repository browser, never type paths manually
- Store full '/directory/name' paths and re-validate after repository migrations
- Re-open and re-save steps after repo-to-repo or env-to-env copies
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
- ColumnExists.Error.TablenameFieldMissing
- exceptionMessage
- GetSubFolders.Exception.CouldnotFindField
- GetSubFolders.Log.NoField
- GPload.Exception.DataFileMissing
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)