pentaho/pentaho-kettle · error · KettleException

LDIFInput.Log.NoField

LDIFInput.Log.NoField

Error message

LDIFInput.Log.NoField

What it means

LDIFInput.openNextFile throws this when the step is configured with 'filename defined in a field' (fileInFields) but the 'filename field' setting is empty. The step needs a previous-row field to supply the LDIF file name; without it there is no way to open a file, so it aborts with 'No field specified'.

Solutions

  1. Open the LDIF Input step and select the actual filename field in the dynamic-filename dropdown.
  2. Ensure the upstream step actually outputs that field (check 'Preview' of the previous step).
  3. If files should be static instead, disable the 'filename from field' option and list files directly.
  4. Save and re-run the transformation.

Example fix

// before (step XML/meta)
// dynamicFilenameField = "" (empty) with fileInFields=true
// after
// dynamicFilenameField = "filename"  (a field emitted by the previous step)
Defensive patterns

Strategy: validation

Validate before calling

// In transformation setup, before run:
StepMeta ldifStep = transMeta.findStep("LDIF Input");
LDIFInputMeta meta = (LDIFInputMeta) ldifStep.getStepMetaInterface();
if (meta.acceptsFilenames() && (meta.getDynamicFilenameField() == null || meta.getDynamicFilenameField().isEmpty())) {
  throw new IllegalStateException("LDIF Input: filename field not configured");
}

Try / catch

try {
  trans.execute(null);
} catch (KettleException e) {
  if (e.getMessage().contains("NoField")) {
    log.error("Configure the filename field in the LDIF Input step");
  }
}

Prevention

When it happens

Trigger: In the LDIF Input step dialog, 'Accept filenames from previous step' / dynamic filename mode is enabled but meta.getDynamicFilenameField() returns empty/null when openNextFile runs (first row arrives).

Common situations: User enabled 'get filename from field' but left the field dropdown empty; transformation copy/paste lost the field setting; field name refers to a renamed upstream field so config appears set but is stale.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/ldifinput/LDIFInput.java:318

        if ( first ) {
          first = false;

          data.inputRowMeta = getInputRowMeta();
          data.outputRowMeta = data.inputRowMeta.clone();
          meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,
            metaStore );

          // Get total previous fields
          data.totalpreviousfields = data.inputRowMeta.size();

          // Create convert meta-data objects that will contain Date & Number formatters
          data.convertRowMeta = data.outputRowMeta.cloneToType( ValueMetaInterface.TYPE_STRING );

          // Check is filename field is provided
          if ( Utils.isEmpty( meta.getDynamicFilenameField() ) ) {
            logError( BaseMessages.getString( PKG, "LDIFInput.Log.NoField" ) );
            throw new KettleException( BaseMessages.getString( PKG, "LDIFInput.Log.NoField" ) );
          }

          // cache the position of the field
          if ( data.indexOfFilenameField < 0 ) {
            data.indexOfFilenameField = getInputRowMeta().indexOfValue( meta.getDynamicFilenameField() );
            if ( data.indexOfFilenameField < 0 ) {
              // The field is unreachable !
              logError( BaseMessages.getString( PKG, "LDIFInput.Log.ErrorFindingField" )
                + "[" + meta.getDynamicFilenameField() + "]" );
              throw new KettleException( BaseMessages.getString(
                PKG, "LDIFInput.Exception.CouldnotFindField", meta.getDynamicFilenameField() ) );
            }
          }

        } // End if first
        String filename = environmentSubstitute( getInputRowMeta().getString( data.readrow, data.indexOfFilenameField ) );
        if ( isDetailed() ) {
          logDetailed( BaseMessages.getString( PKG, "LDIFInput.Log.FilenameInStream", meta

View on GitHub (pinned to f3058517a1)