{"record":{"id":"2437b7e375c88369","repo":"pentaho/pentaho-kettle","slug":"singlethreaderdialog-exception-novalidmappingdetailsfound-2437b7","errorCode":null,"errorMessage":"SingleThreaderDialog.Exception.NoValidMappingDetailsFound","messagePattern":"SingleThreaderDialog\\.Exception\\.NoValidMappingDetailsFound","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"ui/src/main/java/org/pentaho/di/ui/trans/steps/singlethreader/SingleThreaderDialog.java","lineNumber":544,"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, \"SingleThreaderDialog.Exception.NoValidMappingDetailsFound\" ) );\n        }\n        RepositoryDirectoryInterface repdir = repository.findDirectory( realDirectory );\n        if ( repdir == null ) {\n          throw new KettleException( BaseMessages.getString(\n            PKG, \"SingleThreaderDialog.Exception.UnableToFindRepositoryDirectory)\" ) );\n        }\n        loadRepositoryTrans( realTransname, repdir );\n        break;\n      case REPOSITORY_BY_REFERENCE:\n        mappingTransMeta = repository.loadTransformation( referenceObjectId, null ); // load the last version\n        mappingTransMeta.clearChanged();\n        break;\n      default:\n        break;\n    }\n\n    wInjectStep.setText( getInjectorStep( mappingTransMeta ) );","sourceCodeStart":526,"sourceCodeEnd":562,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/ui/src/main/java/org/pentaho/di/ui/trans/steps/singlethreader/SingleThreaderDialog.java#L526-L562","documentation":"SingleThreaderDialog.loadTransformation splits a repository transformation path into directory and transformation name. If either part is empty after parsing (path missing a '/' or blank), it throws this KettleException keyed to SingleThreaderDialog.Exception.NoValidMappingDetailsFound, because the Single Threader's sub-transformation reference cannot be resolved.","triggerScenarios":"Loading the Single Threader mapping transformation by name from a repository when the stored path string has no '/' separator (index == -1) or is empty, leaving realDirectory/realTransname empty.","commonSituations":"Single Threader configured with a transformation name only, not a repository path; references broken by copy/paste of transformations between repositories; manually edited transformation XML with an incomplete path.","solutions":["Enter the full repository path of the sub-transformation (e.g. /public/flows/sub-trans)","Reopen the Single Threader dialog and reselect the mapping transformation","Verify the referenced transformation still exists at the saved path","If using a file, ensure the file radio is selected with a valid filename instead of repository-by-name"],"exampleFix":"// before\nString transPath = \"sub-trans\"; // no directory -> exception\n// after\nString transPath = \"/public/flows/sub-trans\";","handlingStrategy":"validation","validationCode":"// Java: validate sub-transformation path 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 ) { promptUserToReselectSubTransformation(); }","preventionTips":["Always specify sub-transformations via the repository browser, not typed names","Re-validate Single Threader references after moving sub-transformations","Keep sub-transformations in stable directories"],"tags":["repository","singlethreader","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"}