pentaho/pentaho-kettle · error · KettleException
MappingDialog.Exception.NoValidMappingDetailsFound
MappingDialog.Exception.NoValidMappingDetailsFound
Error message
MappingDialog.Exception.NoValidMappingDetailsFound
What it means
Thrown by MappingDialog.loadTransformation when the configured repository transformation path cannot be parsed into both a non-empty directory and a non-empty transformation name. Like the JobExecutor equivalent, it guards the path-splitting logic before any repository lookup.
Solutions
- Specify the full repository path of the mapping, e.g. /public/common/ChildTransform
- Re-select the mapping through the repository browser in the Mapping dialog
- Check the Mapping step meta for a partially filled directory/transformation name pair
- If specifying by filename/objectId instead, ensure the specification type matches the intended source
Example fix
// before
mapping.setTransName("ChildTransform");
// after
mapping.setDirectoryPath("/public/common");
mapping.setTransName("ChildTransform"); Defensive patterns
Strategy: validation
Validate before calling
if (transPath == null || !transPath.contains("/")) throw new IllegalArgumentException("Mapping path must be '<dir>/<transname>': " + transPath);
int idx = transPath.lastIndexOf('/');
if (idx == 0 || idx == transPath.length() - 1) throw new IllegalArgumentException("Empty directory or name: " + transPath); Type guard
boolean isValidTransPath(String p) { return p != null && p.lastIndexOf('/') > 0 && p.lastIndexOf('/') < p.length() - 1; } Try / catch
try { dialog.loadTransformation(); } catch (KettleException e) { showError(e.getMessage()); } Prevention
- Store full directory+name mapping specifications
- Browse to select the sub-transformation instead of typing
- Audit mapping metas after migrations
When it happens
Trigger: The mapping (sub-transformation) path string has no '/' separator, or splitting yields an empty directory (leading '/') or empty name (trailing '/'), triggered from getData or ok.
Common situations: User typed only the transformation name without its repository folder, pasted a path with trailing slash, or an inherited/migrated mapping specification stored an incomplete path.
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
- JobExecutorDialog.Exception.NoValidMappingDetailsFound
- MappingDialog.Exception.UnableToFindRepositoryDirectory
- Bounds of this rule are not numeric: lowerBound=
- JobExecutorDialog.Exception.UnableToFindRepositoryDirectory
- MappingDialog.Exception.NotConnectedToRepository.Message
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/79f7c1205043d446.
Report an issue: GitHub.
Appendix: source
Thrown at ui/src/main/java/org/pentaho/di/ui/trans/steps/mapping/MappingDialog.java:447
case REPOSITORY_BY_NAME:
if ( Utils.isEmpty( filename ) ) {
return;
}
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, "MappingDialog.Exception.NoValidMappingDetailsFound" ) );
}
RepositoryDirectoryInterface repdir = repository.findDirectory( realDirectory );
if ( repdir == null ) {
throw new KettleException( BaseMessages.getString(
PKG, "MappingDialog.Exception.UnableToFindRepositoryDirectory" ) );
}
loadRepositoryTrans( realTransname, repdir );
break;
default:
break;
}
}
private void getByReferenceData( ObjectId transObjectId ) {
try {
if ( repository == null ) {
throw new KettleException( BaseMessages.getString(View on GitHub (pinned to f3058517a1)