{"record":{"id":"3e25517bb3a55e4a","repo":"pentaho/pentaho-kettle","slug":"jobtrans-dialog-exception-novalidmappingdetailsfound","errorCode":null,"errorMessage":"JobTrans.Dialog.Exception.NoValidMappingDetailsFound","messagePattern":"JobTrans\\.Dialog\\.Exception\\.NoValidMappingDetailsFound","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"ui/src/main/java/org/pentaho/di/ui/job/entries/trans/JobEntryTransDialog.java","lineNumber":421,"sourceCode":"\n    jobEntry = null;\n    dispose();\n  }\n\n  private void getInfo( JobEntryTrans jet ) throws KettleException {\n    jet.setName( wName.getText() );\n    jet.setParentJobMeta( jobMeta );\n    if ( rep != null ) {\n      specificationMethod = ObjectLocationSpecificationMethod.REPOSITORY_BY_NAME;\n    } else {\n      specificationMethod = ObjectLocationSpecificationMethod.FILENAME;\n    }\n    jet.setSpecificationMethod( specificationMethod );\n    switch ( specificationMethod ) {\n      case FILENAME:\n        jet.setFileName( wPath.getText() );\n        if ( jet.getFilename().isEmpty() ) {\n          throw new KettleException( BaseMessages.getString( PKG,\n            \"JobTrans.Dialog.Exception.NoValidMappingDetailsFound\" ) );\n        }\n\n        jet.setDirectory( null );\n        jet.setTransname( null );\n        jet.setTransObjectId( null );\n        break;\n      case REPOSITORY_BY_NAME:\n        String transPath = wPath.getText();\n        String transName = transPath;\n        String directory = \"\";\n        int index = transPath.lastIndexOf( \"/\" );\n        if ( index != -1 ) {\n          transName = transPath.substring( index + 1 );\n          directory = index == 0 ? \"/\" : transPath.substring( 0, index );\n        }\n        jet.setDirectory( directory );\n        jet.setTransname( transName );","sourceCodeStart":403,"sourceCodeEnd":439,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/ui/src/main/java/org/pentaho/di/ui/job/entries/trans/JobEntryTransDialog.java#L403-L439","documentation":"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.","triggerScenarios":"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.","commonSituations":"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().","solutions":["Enter a valid, non-empty transformation file path (.ktr) in the Path field before pressing OK.","Switch the specification method to 'By name' (repository) and select the transformation from the repository instead.","If building the JobEntryTrans in code, call setFileName(path) whenever specificationMethod is FILENAME."],"exampleFix":"// before\njobEntry.setSpecificationMethod( FILENAME );\njobEntry.setFileName( \"\" );\n// after\nString path = new File( TRANSFORMATIONS_DIR, \"my-trans.ktr\" ).getAbsolutePath();\nif ( path != null && !path.isEmpty() ) {\n  jobEntry.setSpecificationMethod( FILENAME );\n  jobEntry.setFileName( path );\n}","handlingStrategy":"validation","validationCode":"if ( jet.getSpecificationMethod() == FILENAME\n    && ( jet.getFileName() == null || jet.getFileName().trim().isEmpty() ) ) {\n  throw new IllegalArgumentException(\n    \"JobEntryTrans uses FILENAME but no transformation file path is set\" );\n}","typeGuard":null,"tryCatchPattern":"try {\n  dialog.open();\n} catch ( KettleException e ) {\n  if ( e.getMessage().contains( \"NoValidMappingDetailsFound\" ) ) {\n    showFieldError( wPath, \"A transformation file path is required\" );\n    wPath.setFocus();\n  } else {\n    throw e;\n  }\n}","preventionTips":["Never OK the dialog with an empty Path field when specification method is FILENAME.","When switching specification methods programmatically, always populate the matching field (fileName or transObjectId).","Prefer the repository 'by name' specification for jobs stored in a repository to avoid path dependencies.","Use absolute paths resolved at job-generation time, not user-typed blanks."],"tags":["kettle","job-entry","validation","missing-filename","ui-dialog"],"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"}