{"record":{"id":"402a37dc0f133cac","repo":"pentaho/pentaho-kettle","slug":"transexecutordialog-exception-novalidmappingdetailsfound","errorCode":null,"errorMessage":"TransExecutorDialog.Exception.NoValidMappingDetailsFound","messagePattern":"TransExecutorDialog\\.Exception\\.NoValidMappingDetailsFound","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"ui/src/main/java/org/pentaho/di/ui/trans/steps/transexecutor/TransExecutorDialog.java","lineNumber":388,"sourceCode":"          wPath.setText( filename );\n        }\n        loadFileTrans( filename );\n        break;\n      case REPOSITORY_BY_NAME:\n        if ( Utils.isEmpty( filename ) ) {\n          return;\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, \"TransExecutorDialog.Exception.NoValidMappingDetailsFound\" ) );\n        }\n        RepositoryDirectoryInterface repdir = repository.findDirectory( realDirectory );\n        if ( repdir == null ) {\n          throw new KettleException( BaseMessages.getString(\n            PKG, \"TransExecutorDialog.Exception.UnableToFindRepositoryDirectory\" ) );\n        }\n        loadRepositoryTrans( realTransname, repdir );\n        break;\n      default:\n        break;\n    }\n  }\n\n  /**\n   * Copy information from the meta-data input to the dialog fields.\n   */\n  public void getData() {","sourceCodeStart":370,"sourceCodeEnd":406,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/ui/src/main/java/org/pentaho/di/ui/trans/steps/transexecutor/TransExecutorDialog.java#L370-L406","documentation":"Thrown by TransExecutorDialog.loadTransformation when a transformation path specified for the TransExecutor step cannot be split into a repository directory and a transformation name. The step requires both a non-empty directory part and a non-empty transformation name to locate the child transformation in the repository.","triggerScenarios":"The user selected 'TransExecutor transformation in the repository' but the stored transPath string has no '/' separator, or the directory portion before the last '/' is empty, or the transformation name after it is empty.","commonSituations":"A copied/moved job references a transformation whose path was never re-selected; hand-edited metadata (ktr/kjb XML) with an incomplete repository path; repository export/import that dropped the directory prefix.","solutions":["Open the TransExecutor step dialog and re-select the transformation from the repository so a full 'directory/transformation' path is stored.","Verify the transformation still exists at the configured repository directory and the path format is '/dir/subdir/name'.","If using a file instead of a repository entry, switch the 'Load from' option to 'File' and pick the .ktr file.","Fix the path in the saved job XML or via the repository browser if the dialog cannot be opened directly."],"exampleFix":"// before (stored path)\ntransPath = \"MyTrans\"\n// after\ntransPath = \"/public/jobs/MyTrans\"","handlingStrategy":"validation","validationCode":"int idx = transPath != null ? transPath.lastIndexOf('/') : -1;\nString dir = idx > 0 ? transPath.substring(0, idx) : \"\";\nString name = idx != -1 ? transPath.substring(idx + 1) : \"\";\nif (dir.isEmpty() || name.isEmpty()) throw new IllegalArgumentException(\"Need '/dir/transname', got: \" + transPath);","typeGuard":"boolean isValidRepoPath(String p) { if (p == null) return false; int i = p.lastIndexOf('/'); return i > 0 && i < p.length() - 1; }","tryCatchPattern":"try { dialog.loadTransformation(...); } catch (KettleException e) { logError(\"Invalid TransExecutor repository path: \" + e.getMessage(), e); }","preventionTips":["Always select transformations via the repository browser, never type paths manually","Store full '/directory/name' paths and re-validate after repository migrations","Re-open and re-save steps after repo-to-repo or env-to-env copies"],"tags":["kettle","pdi","trans-executor","repository-path","configuration"],"backgroundTag":"invalid-argument-format","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"}