pentaho/pentaho-kettle · error · KettleException
SimpleMappingDialog.Exception.NoValidMappingDetailsFound
Error message
SimpleMappingDialog.Exception.NoValidMappingDetailsFound
What it means
SimpleMappingDialog.loadTransformation parses a repository transformation path of the form /directory/transformation. If after splitting the path either the directory part or the transformation name is empty, it throws this KettleException (SimpleMappingDialog.Exception.NoValidMappingDetailsFound) because a mapping (sub-transformation) reference cannot be resolved without both parts.
Solutions
- Set the mapping transformation reference to a full repository path like /public/subflows/my-mapping
- Re-open the Simple Mapping ( Mapping ) step dialog and reselect the mapping transformation
- Verify the mapping still exists in the repository and the reference was not orphaned by a rename/move
- If loading from file, ensure the mapping file path was supplied rather than a repository path
Example fix
// before mappingTransMeta = loadTransformation( "/my-mapping" ); // no directory part -> throws // after mappingTransMeta = loadTransformation( "/public/subflows/my-mapping" );
Defensive patterns
Strategy: validation
Validate before calling
// Java: validate mapping path has directory and name before loading int idx = transPath.lastIndexOf( '/' ); boolean valid = idx > 0 && !transPath.substring( 0, idx ).isEmpty() && !transPath.substring( idx + 1 ).isEmpty();
Type guard
boolean isFullRepoPath = transPath != null && transPath.contains( "/" ) && transPath.lastIndexOf( '/' ) < transPath.length() - 1;
Try / catch
try { loadTransformation( transPath ); } catch ( KettleException e ) { promptUserToReselectMapping(); } Prevention
- Store mapping references as full /dir/name repository paths
- Re-resolve mapping references after renaming or moving sub-transformations
- Avoid hand-editing mapping paths in transformation XML
When it happens
Trigger: Loading mapping metadata when SpecifyMerge is by name from repository and the stored transPath lacks a '/' separator or is empty/blank, so realDirectory or realTransname ends up empty after substring parsing.
Common situations: Mapping step configured with a bare transformation name without a repository path; copied job/trans metadata referencing a mapping that no longer exists at the saved path; manual edits to transformation XML that blank the mapping path.
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
- SimpleMappingDialog.Exception.UnableToFindRepositoryDirector…
- SimpleMappingDialog.Exception.NotConnectedToRepository.Messa…
- SingleThreaderDialog.Exception.NoValidMappingDetailsFound
- GetRepositoryNames.Exception.NotConnectedToRepository
- MappingDialog.Exception.UnableToFindRepositoryDirectory
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/26d84974f81e1940.
Report an issue: GitHub.
Appendix: source
Thrown at ui/src/main/java/org/pentaho/di/ui/trans/steps/simplemapping/SimpleMappingDialog.java:409
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, "SimpleMappingDialog.Exception.NoValidMappingDetailsFound" ) );
}
RepositoryDirectoryInterface repdir = repository.findDirectory( realDirectory );
if ( repdir == null ) {
throw new KettleException( BaseMessages.getString(
PKG, "SimpleMappingDialog.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)