{"record":{"id":"1d22dad526845a2a","repo":"pentaho/pentaho-kettle","slug":"singlethreaderdialog-exception-novalidmappingdetailsfound","errorCode":null,"errorMessage":"SingleThreaderDialog.Exception.NoValidMappingDetailsFound","messagePattern":"SingleThreaderDialog\\.Exception\\.NoValidMappingDetailsFound","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/meta-inject/impl/src/main/java/org/pentaho/di/trans/steps/metainject/MetaInjectDialog.java","lineNumber":765,"sourceCode":"      case REPOSITORY_BY_NAME:\n        if ( isEmptyFilename ) {\n          return false;\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        if ( referenceObjectId == null ) {\n          return false;\n        }\n        injectTransMeta = repository.loadTransformation( referenceObjectId, null ); // load the last version\n        injectTransMeta.clearChanged();\n        break;\n      default:\n        break;","sourceCodeStart":747,"sourceCodeEnd":783,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/meta-inject/impl/src/main/java/org/pentaho/di/trans/steps/metainject/MetaInjectDialog.java#L747-L783","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\nString transPath = 'myTransformation'; // no directory\n// after\nString transPath = '/home/admin/myTransformation';","handlingStrategy":"validation","validationCode":"// Validate repository path before passing to the dialog logic\nString transPath = '/home/admin/myTransformation';\nint idx = transPath.lastIndexOf('/');\nif (idx <= 0 || idx == transPath.length() - 1) {\n  throw new IllegalArgumentException('Path must be /directory/transformation');\n}","typeGuard":"boolean isFullRepoPath(String p) {\n  int i = p == null ? -1 : p.lastIndexOf('/');\n  return i > 0 && i < p.length() - 1;\n}","tryCatchPattern":"try {\n  // load transformation by repository path in dialog\n} catch (KettleException e) {\n  if (e.getMessage().contains('NoValidMappingDetailsFound')) {\n    log.error('Repository path must include directory and name, e.g. /home/admin/trans', e);\n  } else throw e;\n}","preventionTips":["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"],"tags":["swing-dialog","repository","path-parsing"],"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"}