pentaho/pentaho-kettle · error · KettleException

JobExecutorDialog.Exception.NoValidMappingDetailsFound

JobExecutorDialog.Exception.NoValidMappingDetailsFound

Error message

JobExecutorDialog.Exception.NoValidMappingDetailsFound

What it means

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.

Solutions

  1. Enter the full repository path including directory and job name, e.g. /home/admin/MyJob
  2. Verify the path separator '/' exists between directory and job name
  3. Re-open the Job Executor dialog and re-select the job via the repository browser instead of typing the path
  4. Check that the JobExecutor meta's job path field was not corrupted by import/export

Example fix

// before
jobExecutor.setJobName("MyJob");
// after
jobExecutor.setDirectory("/home/admin");
jobExecutor.setJobName("MyJob"); // directory + name must both be non-empty
Defensive patterns

Strategy: validation

Validate before calling

if (path == null || !path.contains("/")) throw new IllegalArgumentException("Job path must be '<dir>/<jobname>': " + path);
String dir = path.substring(0, path.lastIndexOf('/'));
String name = path.substring(path.lastIndexOf('/') + 1);
if (dir.isEmpty() || name.isEmpty()) throw new IllegalArgumentException("Empty directory or job name in: " + path);

Type guard

boolean isValidJobPath(String p) { return p != null && p.lastIndexOf('/') > 0 && p.lastIndexOf('/') < p.length() - 1; }

Try / catch

try { dialog.loadJob(); } catch (KettleException e) { log.error("Invalid job mapping path: " + e.getMessage()); }

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Understand the failure class

Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/12f0d62986d3cd35. Report an issue: GitHub.

Appendix: source

Thrown at ui/src/main/java/org/pentaho/di/ui/trans/steps/jobexecutor/JobExecutorDialog.java:388

          wPath.setText( filename );
        }
        loadFileJob( filename );
        break;
      case REPOSITORY_BY_NAME:
        if ( Utils.isEmpty( filename ) ) {
          return;
        }
        String transPath = transMeta.environmentSubstitute( filename );
        String realJobname = transPath;
        String realDirectory = "";
        int index = transPath.lastIndexOf( "/" );
        if ( index != -1 ) {
          realJobname = transPath.substring( index + 1 );
          realDirectory = transPath.substring( 0, index );
        }

        if ( Utils.isEmpty( realDirectory ) || Utils.isEmpty( realJobname ) ) {
          throw new KettleException(
            BaseMessages.getString( PKG, "JobExecutorDialog.Exception.NoValidMappingDetailsFound" ) );
        }
        RepositoryDirectoryInterface repdir = repository.findDirectory( realDirectory );
        if ( repdir == null ) {
          throw new KettleException( BaseMessages.getString(
            PKG, "JobExecutorDialog.Exception.UnableToFindRepositoryDirectory" ) );
        }
        loadRepositoryJob( realJobname, repdir );
        break;
      default:
        break;
    }
  }


  /**
   * Copy information from the meta-data input to the dialog fields.
   */

View on GitHub (pinned to f3058517a1)