pentaho/pentaho-kettle · error · KettleException

SingleThreaderDialog.Exception.UnableToFindRepositoryDirecto…

Error message

SingleThreaderDialog.Exception.UnableToFindRepositoryDirectory)

What it means

SingleThreaderDialog.loadTransformation resolves the directory part of the sub-transformation path with repository.findDirectory(realDirectory). A null result (no such directory in the repository) triggers this KettleException keyed to SingleThreaderDialog.Exception.UnableToFindRepositoryDirectory) — note the stray closing paren in the message key, which also means the properties entry must literally include the ')'.

Solutions

  1. Reselect the sub-transformation in the Single Threader dialog to refresh the path
  2. Confirm the directory exists in the Repository explorer of the connected repository
  3. Ensure you are connected to the repository where the sub-transformation lives
  4. If fixing message bundles, define the key exactly as "SingleThreaderDialog.Exception.UnableToFindRepositoryDirectory)" including the paren, or correct the key in code

Example fix

// before
String transPath = "/deleted-dir/sub-trans"; // findDirectory -> null
// after
String transPath = "/public/flows/sub-trans"; // existing directory
Defensive patterns

Strategy: validation

Validate before calling

// Java: confirm the target directory exists before loading
RepositoryDirectoryInterface dir = repository.findDirectory( realDirectory );
if ( dir == null ) throw new IllegalStateException( "Directory not found: " + realDirectory );

Type guard

boolean dirExists = realDirectory != null && repository.findDirectory( realDirectory ) != null;

Try / catch

try { loadSubTrans( path ); } catch ( KettleException e ) { showRepositoryBrowserToReselect(); }

Prevention

When it happens

Trigger: Loading the Single Threader mapping by repository name where the directory prefix of the stored path does not exist in the connected repository.

Common situations: Sub-transformation folder renamed/deleted after reference was saved; pointing at a different repository; case-sensitive path mismatches; migrated transformations.

Related errors


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

Appendix: source

Thrown at ui/src/main/java/org/pentaho/di/ui/trans/steps/singlethreader/SingleThreaderDialog.java:549

          filename = filename.replace( ".ktr", "" );
          wPath.setText( filename );
        }
        String transPath = transMeta.environmentSubstitute( filename );
        String realTransname = transPath;
        String realDirectory = "";
        int index = transPath.lastIndexOf( "/" );
        if ( index != -1 ) {
          realTransname = transPath.substring( index + 1 );
          realDirectory = transPath.substring( 0, index );
        }

        if ( Utils.isEmpty( realDirectory ) || Utils.isEmpty( realTransname ) ) {
          throw new KettleException(
            BaseMessages.getString( PKG, "SingleThreaderDialog.Exception.NoValidMappingDetailsFound" ) );
        }
        RepositoryDirectoryInterface repdir = repository.findDirectory( realDirectory );
        if ( repdir == null ) {
          throw new KettleException( BaseMessages.getString(
            PKG, "SingleThreaderDialog.Exception.UnableToFindRepositoryDirectory)" ) );
        }
        loadRepositoryTrans( realTransname, repdir );
        break;
      case REPOSITORY_BY_REFERENCE:
        mappingTransMeta = repository.loadTransformation( referenceObjectId, null ); // load the last version
        mappingTransMeta.clearChanged();
        break;
      default:
        break;
    }

    wInjectStep.setText( getInjectorStep( mappingTransMeta ) );
  }

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

View on GitHub (pinned to f3058517a1)