pentaho/pentaho-kettle · error · KettleException

JobTrans.Dialog.Exception.NoValidMappingDetailsFound

Error message

JobTrans.Dialog.Exception.NoValidMappingDetailsFound

What it means

When the JobEntryTrans is configured to reference its transformation by FILENAME, getInfo() reads wPath and calls jet.setFileName(). If that filename is empty, it throws KettleException 'JobTrans.Dialog.Exception.NoValidMappingDetailsFound' because no valid transformation reference details were supplied. It is raised from getInfo, which is invoked by getParameters and ok, so clicking OK with an empty path triggers it.

Solutions

  1. Enter a valid, non-empty transformation file path (.ktr) in the Path field before pressing OK.
  2. Switch the specification method to 'By name' (repository) and select the transformation from the repository instead.
  3. If building the JobEntryTrans in code, call setFileName(path) whenever specificationMethod is FILENAME.

Example fix

// before
jobEntry.setSpecificationMethod( FILENAME );
jobEntry.setFileName( "" );
// after
String path = new File( TRANSFORMATIONS_DIR, "my-trans.ktr" ).getAbsolutePath();
if ( path != null && !path.isEmpty() ) {
  jobEntry.setSpecificationMethod( FILENAME );
  jobEntry.setFileName( path );
}
Defensive patterns

Strategy: validation

Validate before calling

if ( jet.getSpecificationMethod() == FILENAME
    && ( jet.getFileName() == null || jet.getFileName().trim().isEmpty() ) ) {
  throw new IllegalArgumentException(
    "JobEntryTrans uses FILENAME but no transformation file path is set" );
}

Try / catch

try {
  dialog.open();
} catch ( KettleException e ) {
  if ( e.getMessage().contains( "NoValidMappingDetailsFound" ) ) {
    showFieldError( wPath, "A transformation file path is required" );
    wPath.setFocus();
  } else {
    throw e;
  }
}

Prevention

When it happens

Trigger: Job entry dialog with specification method FILENAME and the path field (wPath) left blank or containing only whitespace when OK or parameter retrieval is pressed.

Common situations: User cleared the transformation path after switching specification methods; importing jobs where the file-name field was never populated; programmatic job construction that set specificationMethod=FILENAME but forgot setFileName().

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/3e25517bb3a55e4a. Report an issue: GitHub.

Appendix: source

Thrown at ui/src/main/java/org/pentaho/di/ui/job/entries/trans/JobEntryTransDialog.java:421

    jobEntry = null;
    dispose();
  }

  private void getInfo( JobEntryTrans jet ) throws KettleException {
    jet.setName( wName.getText() );
    jet.setParentJobMeta( jobMeta );
    if ( rep != null ) {
      specificationMethod = ObjectLocationSpecificationMethod.REPOSITORY_BY_NAME;
    } else {
      specificationMethod = ObjectLocationSpecificationMethod.FILENAME;
    }
    jet.setSpecificationMethod( specificationMethod );
    switch ( specificationMethod ) {
      case FILENAME:
        jet.setFileName( wPath.getText() );
        if ( jet.getFilename().isEmpty() ) {
          throw new KettleException( BaseMessages.getString( PKG,
            "JobTrans.Dialog.Exception.NoValidMappingDetailsFound" ) );
        }

        jet.setDirectory( null );
        jet.setTransname( null );
        jet.setTransObjectId( null );
        break;
      case REPOSITORY_BY_NAME:
        String transPath = wPath.getText();
        String transName = transPath;
        String directory = "";
        int index = transPath.lastIndexOf( "/" );
        if ( index != -1 ) {
          transName = transPath.substring( index + 1 );
          directory = index == 0 ? "/" : transPath.substring( 0, index );
        }
        jet.setDirectory( directory );
        jet.setTransname( transName );

View on GitHub (pinned to f3058517a1)