pentaho/pentaho-kettle · error · KettleException
JobExecutorDialog.Exception.NoValidMappingDetailsFound
JobExecutorDialog.Exception.NoValidMappingDetailsFound
Error message
JobExecutorDialog.Exception.NoValidMappingDetailsFound
What it means
Thrown by JobExecutorDialog.loadJob when a repository job path cannot be split into a non-empty directory and job name. The dialog parses the entered 'path/jobname' string; if either half is empty after parsing, it aborts loading the referenced job. This is a pre-flight validation error, not a runtime data failure.
Solutions
- Enter the full repository path including directory and job name, e.g. /home/admin/MyJob
- Verify the path separator '/' exists between directory and job name
- Re-open the Job Executor dialog and re-select the job via the repository browser instead of typing the path
- Check that the JobExecutor meta's job path field was not corrupted by import/export
Example fix
// before
jobExecutor.setJobName("MyJob");
// after
jobExecutor.setDirectory("/home/admin");
jobExecutor.setJobName("MyJob"); // directory + name must both be non-empty Defensive patterns
Strategy: validation
Validate before calling
if (path == null || !path.contains("/")) throw new IllegalArgumentException("Job path must be '<dir>/<jobname>': " + path);
String dir = path.substring(0, path.lastIndexOf('/'));
String name = path.substring(path.lastIndexOf('/') + 1);
if (dir.isEmpty() || name.isEmpty()) throw new IllegalArgumentException("Empty directory or job name in: " + path); Type guard
boolean isValidJobPath(String p) { return p != null && p.lastIndexOf('/') > 0 && p.lastIndexOf('/') < p.length() - 1; } Try / catch
try { dialog.loadJob(); } catch (KettleException e) { log.error("Invalid job mapping path: " + e.getMessage()); } Prevention
- Always configure both directory and job name fields explicitly
- Use the repository browser rather than typing paths
- Validate paths after repository reorganizations
When it happens
Trigger: Selecting a repository-based job reference in the Job Executor dialog where the transPath string contains no '/' separator, or the path is like '/jobname' or 'dir/' so realDirectory or realJobname ends up empty.
Common situations: Users type a bare job name without a directory path, paste a path with a trailing slash, or the job path field was populated by an older/migrated mapping that stored only a name.
Understand the failure class
Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.
Related errors
- MappingDialog.Exception.NoValidMappingDetailsFound
- Bounds of this rule are not numeric: lowerBound=
- JobExecutorDialog.Exception.UnableToFindRepositoryDirectory
- MappingDialog.Exception.NotConnectedToRepository.Message
- MappingDialog.Exception.UnableToFindRepositoryDirectory
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/12f0d62986d3cd35.
Report an issue: GitHub.
Appendix: source
Thrown at ui/src/main/java/org/pentaho/di/ui/trans/steps/jobexecutor/JobExecutorDialog.java:388
wPath.setText( filename );
}
loadFileJob( filename );
break;
case REPOSITORY_BY_NAME:
if ( Utils.isEmpty( filename ) ) {
return;
}
String transPath = transMeta.environmentSubstitute( filename );
String realJobname = transPath;
String realDirectory = "";
int index = transPath.lastIndexOf( "/" );
if ( index != -1 ) {
realJobname = transPath.substring( index + 1 );
realDirectory = transPath.substring( 0, index );
}
if ( Utils.isEmpty( realDirectory ) || Utils.isEmpty( realJobname ) ) {
throw new KettleException(
BaseMessages.getString( PKG, "JobExecutorDialog.Exception.NoValidMappingDetailsFound" ) );
}
RepositoryDirectoryInterface repdir = repository.findDirectory( realDirectory );
if ( repdir == null ) {
throw new KettleException( BaseMessages.getString(
PKG, "JobExecutorDialog.Exception.UnableToFindRepositoryDirectory" ) );
}
loadRepositoryJob( realJobname, repdir );
break;
default:
break;
}
}
/**
* Copy information from the meta-data input to the dialog fields.
*/View on GitHub (pinned to f3058517a1)