pentaho/pentaho-kettle · error · KettleException

MappingDialog.Exception.NoValidMappingDetailsFound

MappingDialog.Exception.NoValidMappingDetailsFound

Error message

MappingDialog.Exception.NoValidMappingDetailsFound

What it means

Thrown by MappingDialog.loadTransformation when the configured repository transformation path cannot be parsed into both a non-empty directory and a non-empty transformation name. Like the JobExecutor equivalent, it guards the path-splitting logic before any repository lookup.

Solutions

  1. Specify the full repository path of the mapping, e.g. /public/common/ChildTransform
  2. Re-select the mapping through the repository browser in the Mapping dialog
  3. Check the Mapping step meta for a partially filled directory/transformation name pair
  4. If specifying by filename/objectId instead, ensure the specification type matches the intended source

Example fix

// before
mapping.setTransName("ChildTransform");
// after
mapping.setDirectoryPath("/public/common");
mapping.setTransName("ChildTransform");
Defensive patterns

Strategy: validation

Validate before calling

if (transPath == null || !transPath.contains("/")) throw new IllegalArgumentException("Mapping path must be '<dir>/<transname>': " + transPath);
int idx = transPath.lastIndexOf('/');
if (idx == 0 || idx == transPath.length() - 1) throw new IllegalArgumentException("Empty directory or name: " + transPath);

Type guard

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

Try / catch

try { dialog.loadTransformation(); } catch (KettleException e) { showError(e.getMessage()); }

Prevention

When it happens

Trigger: The mapping (sub-transformation) path string has no '/' separator, or splitting yields an empty directory (leading '/') or empty name (trailing '/'), triggered from getData or ok.

Common situations: User typed only the transformation name without its repository folder, pasted a path with trailing slash, or an inherited/migrated mapping specification stored an incomplete path.

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/79f7c1205043d446. Report an issue: GitHub.

Appendix: source

Thrown at ui/src/main/java/org/pentaho/di/ui/trans/steps/mapping/MappingDialog.java:447

      case REPOSITORY_BY_NAME:
        if ( Utils.isEmpty( filename ) ) {
          return;
        }
        if ( filename.endsWith( ".ktr" ) ) {
          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, "MappingDialog.Exception.NoValidMappingDetailsFound" ) );
        }
        RepositoryDirectoryInterface repdir = repository.findDirectory( realDirectory );
        if ( repdir == null ) {
          throw new KettleException( BaseMessages.getString(
            PKG, "MappingDialog.Exception.UnableToFindRepositoryDirectory" ) );
        }
        loadRepositoryTrans( realTransname, repdir );
        break;
      default:
        break;
    }
  }

  private void getByReferenceData( ObjectId transObjectId ) {
    try {
      if ( repository == null ) {
        throw new KettleException( BaseMessages.getString(

View on GitHub (pinned to f3058517a1)