pentaho/pentaho-kettle · error · KettleException
SingleThreaderDialog.Exception.NoValidMappingDetailsFound
Error message
SingleThreaderDialog.Exception.NoValidMappingDetailsFound
What it means
Reused message key from SingleThreaderDialog thrown by MetaInjectDialog when resolving a repository transformation by name/path: the parsed transPath yields an empty realDirectory or realTransname, so no valid mapping details (repository directory + transformation name) could be derived. The dialog aborts loading the referenced transformation.
Solutions
- Provide the full repository path including directory, e.g. '/home/admin/myTransformation', not just the transformation name
- If the transformation is at the repository root, verify how your PDI version expects root paths to be expressed
- Re-open the Browse dialog and select the transformation from the repository tree instead of typing the path
- Use 'Specify by name and directory' with both fields explicitly filled
Example fix
// before String transPath = 'myTransformation'; // no directory // after String transPath = '/home/admin/myTransformation';
Defensive patterns
Strategy: validation
Validate before calling
// Validate repository path before passing to the dialog logic
String transPath = '/home/admin/myTransformation';
int idx = transPath.lastIndexOf('/');
if (idx <= 0 || idx == transPath.length() - 1) {
throw new IllegalArgumentException('Path must be /directory/transformation');
} Type guard
boolean isFullRepoPath(String p) {
int i = p == null ? -1 : p.lastIndexOf('/');
return i > 0 && i < p.length() - 1;
} Try / catch
try {
// load transformation by repository path in dialog
} catch (KettleException e) {
if (e.getMessage().contains('NoValidMappingDetailsFound')) {
log.error('Repository path must include directory and name, e.g. /home/admin/trans', e);
} else throw e;
} Prevention
- Always use full '/directory/name' repository paths
- Use the Browse dialog instead of typing paths
- Note root-stored transformations may not fit the /dir/name expectation
- Standardize transformation locations under a repository home directory
When it happens
Trigger: In the Meta Inject dialog, picking a transformation from the repository by path where the selected path string lacks a '/' separator or is empty, so splitting on the last '/' cannot produce both directory and transformation name.
Common situations: Transformation stored at repository root (no directory part) with code expecting '/dir/name'; blank transformation path field; path copied incorrectly without the directory prefix; repository browser selection producing an unexpected path format.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- MappingDialog.Exception.NotConnectedToRepository.Message
- SimpleMappingDialog.Exception.NoValidMappingDetailsFound
- SingleThreaderDialog.Exception.UnableToFindRepositoryDirecto…
- SingleThreaderDialog.Exception.NoValidMappingDetailsFound
- AbortMeta.Exception.UnableToSaveStepInfoToRepository
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/1d22dad526845a2a.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/meta-inject/impl/src/main/java/org/pentaho/di/trans/steps/metainject/MetaInjectDialog.java:765
case REPOSITORY_BY_NAME:
if ( isEmptyFilename ) {
return false;
}
if ( filename.endsWith( ".ktr" ) ) {
filename = filename.replace( ".ktr", "" );
wPath.setText( filename );
}
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, "SingleThreaderDialog.Exception.NoValidMappingDetailsFound" ) );
}
RepositoryDirectoryInterface repdir = repository.findDirectory( realDirectory );
if ( repdir == null ) {
throw new KettleException( BaseMessages.getString(
PKG, "SingleThreaderDialog.Exception.UnableToFindRepositoryDirectory)" ) );
}
loadRepositoryTrans( realTransname, repdir );
break;
case REPOSITORY_BY_REFERENCE:
if ( referenceObjectId == null ) {
return false;
}
injectTransMeta = repository.loadTransformation( referenceObjectId, null ); // load the last version
injectTransMeta.clearChanged();
break;
default:
break;View on GitHub (pinned to f3058517a1)