{"record":{"id":"26d84974f81e1940","repo":"pentaho/pentaho-kettle","slug":"simplemappingdialog-exception-novalidmappingdetailsfound","errorCode":null,"errorMessage":"SimpleMappingDialog.Exception.NoValidMappingDetailsFound","messagePattern":"SimpleMappingDialog\\.Exception\\.NoValidMappingDetailsFound","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"ui/src/main/java/org/pentaho/di/ui/trans/steps/simplemapping/SimpleMappingDialog.java","lineNumber":409,"sourceCode":"      case REPOSITORY_BY_NAME:\n        if ( Utils.isEmpty( filename ) ) {\n          return;\n        }\n        if ( filename.endsWith( \".ktr\" ) ) {\n          filename = filename.replace( \".ktr\", \"\" );\n          wPath.setText( filename );\n        }\n        String transPath = transMeta.environmentSubstitute( filename );\n        String realTransname = transPath;\n        String realDirectory = \"\";\n        int index = transPath.lastIndexOf( \"/\" );\n        if ( index != -1 ) {\n          realTransname = transPath.substring( index + 1 );\n          realDirectory = transPath.substring( 0, index );\n        }\n\n        if ( Utils.isEmpty( realDirectory ) || Utils.isEmpty( realTransname ) ) {\n          throw new KettleException(\n            BaseMessages.getString( PKG, \"SimpleMappingDialog.Exception.NoValidMappingDetailsFound\" ) );\n        }\n        RepositoryDirectoryInterface repdir = repository.findDirectory( realDirectory );\n        if ( repdir == null ) {\n          throw new KettleException( BaseMessages.getString(\n            PKG, \"SimpleMappingDialog.Exception.UnableToFindRepositoryDirectory\" ) );\n        }\n        loadRepositoryTrans( realTransname, repdir );\n        break;\n      default:\n        break;\n    }\n  }\n\n  private void getByReferenceData( ObjectId transObjectId ) {\n    try {\n      if ( repository == null ) {\n        throw new KettleException( BaseMessages.getString(","sourceCodeStart":391,"sourceCodeEnd":427,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/ui/src/main/java/org/pentaho/di/ui/trans/steps/simplemapping/SimpleMappingDialog.java#L391-L427","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\nmappingTransMeta = loadTransformation( \"/my-mapping\" ); // no directory part -> throws\n// after\nmappingTransMeta = loadTransformation( \"/public/subflows/my-mapping\" );","handlingStrategy":"validation","validationCode":"// Java: validate mapping path has directory and name before loading\nint idx = transPath.lastIndexOf( '/' );\nboolean valid = idx > 0 && !transPath.substring( 0, idx ).isEmpty() && !transPath.substring( idx + 1 ).isEmpty();","typeGuard":"boolean isFullRepoPath = transPath != null && transPath.contains( \"/\" ) && transPath.lastIndexOf( '/' ) < transPath.length() - 1;","tryCatchPattern":"try { loadTransformation( transPath ); } catch ( KettleException e ) { promptUserToReselectMapping(); }","preventionTips":["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"],"tags":["repository","mapping","path-parsing","ui"],"backgroundTag":"missing-required-argument","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}