{"record":{"id":"12f0d62986d3cd35","repo":"pentaho/pentaho-kettle","slug":"jobexecutordialog-exception-novalidmappingdetailsfound","errorCode":"JobExecutorDialog.Exception.NoValidMappingDetailsFound","errorMessage":"JobExecutorDialog.Exception.NoValidMappingDetailsFound","messagePattern":"JobExecutorDialog\\.Exception\\.NoValidMappingDetailsFound","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"ui/src/main/java/org/pentaho/di/ui/trans/steps/jobexecutor/JobExecutorDialog.java","lineNumber":388,"sourceCode":"          wPath.setText( filename );\n        }\n        loadFileJob( filename );\n        break;\n      case REPOSITORY_BY_NAME:\n        if ( Utils.isEmpty( filename ) ) {\n          return;\n        }\n        String transPath = transMeta.environmentSubstitute( filename );\n        String realJobname = transPath;\n        String realDirectory = \"\";\n        int index = transPath.lastIndexOf( \"/\" );\n        if ( index != -1 ) {\n          realJobname = transPath.substring( index + 1 );\n          realDirectory = transPath.substring( 0, index );\n        }\n\n        if ( Utils.isEmpty( realDirectory ) || Utils.isEmpty( realJobname ) ) {\n          throw new KettleException(\n            BaseMessages.getString( PKG, \"JobExecutorDialog.Exception.NoValidMappingDetailsFound\" ) );\n        }\n        RepositoryDirectoryInterface repdir = repository.findDirectory( realDirectory );\n        if ( repdir == null ) {\n          throw new KettleException( BaseMessages.getString(\n            PKG, \"JobExecutorDialog.Exception.UnableToFindRepositoryDirectory\" ) );\n        }\n        loadRepositoryJob( realJobname, repdir );\n        break;\n      default:\n        break;\n    }\n  }\n\n\n  /**\n   * Copy information from the meta-data input to the dialog fields.\n   */","sourceCodeStart":370,"sourceCodeEnd":406,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/ui/src/main/java/org/pentaho/di/ui/trans/steps/jobexecutor/JobExecutorDialog.java#L370-L406","documentation":"Thrown by JobExecutorDialog.loadJob when a repository job path cannot be split into a non-empty directory and job name. The dialog parses the entered 'path/jobname' string; if either half is empty after parsing, it aborts loading the referenced job. This is a pre-flight validation error, not a runtime data failure.","triggerScenarios":"Selecting a repository-based job reference in the Job Executor dialog where the transPath string contains no '/' separator, or the path is like '/jobname' or 'dir/' so realDirectory or realJobname ends up empty.","commonSituations":"Users type a bare job name without a directory path, paste a path with a trailing slash, or the job path field was populated by an older/migrated mapping that stored only a name.","solutions":["Enter the full repository path including directory and job name, e.g. /home/admin/MyJob","Verify the path separator '/' exists between directory and job name","Re-open the Job Executor dialog and re-select the job via the repository browser instead of typing the path","Check that the JobExecutor meta's job path field was not corrupted by import/export"],"exampleFix":"// before\njobExecutor.setJobName(\"MyJob\");\n// after\njobExecutor.setDirectory(\"/home/admin\");\njobExecutor.setJobName(\"MyJob\"); // directory + name must both be non-empty","handlingStrategy":"validation","validationCode":"if (path == null || !path.contains(\"/\")) throw new IllegalArgumentException(\"Job path must be '<dir>/<jobname>': \" + path);\nString dir = path.substring(0, path.lastIndexOf('/'));\nString name = path.substring(path.lastIndexOf('/') + 1);\nif (dir.isEmpty() || name.isEmpty()) throw new IllegalArgumentException(\"Empty directory or job name in: \" + path);","typeGuard":"boolean isValidJobPath(String p) { return p != null && p.lastIndexOf('/') > 0 && p.lastIndexOf('/') < p.length() - 1; }","tryCatchPattern":"try { dialog.loadJob(); } catch (KettleException e) { log.error(\"Invalid job mapping path: \" + e.getMessage()); }","preventionTips":["Always configure both directory and job name fields explicitly","Use the repository browser rather than typing paths","Validate paths after repository reorganizations"],"tags":["pentaho-kettle","swt-dialog","repository-path","validation"],"backgroundTag":"empty-required-field","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"}