pentaho/pentaho-kettle · error · KettleException
TransExecutorDialog.Exception.UnableToFindRepositoryDirector…
Error message
TransExecutorDialog.Exception.UnableToFindRepositoryDirectory
What it means
Thrown by TransExecutorDialog.loadTransformation after parsing the repository path: repository.findDirectory(realDirectory) returned null, meaning the directory portion of the configured transformation path does not exist in the connected repository.
Solutions
- Connect to the correct repository and verify the directory exists via the repository browser.
- Re-select the transformation in the TransExecutor dialog so the path is refreshed.
- Recreate or rename the target directory to match the configured path, or update the step to the new path.
- Check repository connection settings (user permissions can hide directories).
Example fix
// before realDirectory = "/jobs/old-name" // after (renamed dir) realDirectory = "/jobs/new-name"
Defensive patterns
Strategy: validation
Validate before calling
RepositoryDirectoryInterface dir = repository.findDirectory(realDirectory);
if (dir == null) throw new KettleException("Directory not found in repository: " + realDirectory); Type guard
boolean directoryExists(Repository repo, String path) { return path != null && repo.findDirectory(path) != null; } Try / catch
try { loadTransformation(...); } catch (KettleException e) { showErrorDialog("Repository directory missing — reconnect to the correct repository and reselect the transformation.", e); } Prevention
- Verify the target directory exists in the connected repository before saving the job
- Use consistent directory naming across dev/test/prod repositories
- Check user permissions can see the directory after reconnecting
When it happens
Trigger: TransExecutor is configured with a repository transformation path whose directory (e.g. '/public/jobs') no longer exists in the repository the user is connected to.
Common situations: Connecting to a different repository or environment (dev vs prod) where the directory tree differs; the directory was renamed or deleted; case-sensitivity or leading-slash mistakes in the path.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- ProcessFiles.Error.TargetParentFolderNotExists
- Unable to find repository directory
- ColumnExists.Error.TablenameFieldMissing
- ColumnExistsMeta.Exception.UnableToSaveStepInfo
- ColumnExistsMeta.Exception.UnexpectedErrorReadingStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/25a5df19b5c0230b.
Report an issue: GitHub.
Appendix: source
Thrown at ui/src/main/java/org/pentaho/di/ui/trans/steps/transexecutor/TransExecutorDialog.java:393
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() {
specificationMethod = transExecutorMeta.getSpecificationMethod();
switch ( specificationMethod ) {
case FILENAME:
wPath.setText( Const.NVL( transExecutorMeta.getFileName(), "" ) );
break;View on GitHub (pinned to f3058517a1)