pentaho/pentaho-kettle · error · KettleStepException

XBaseInputDialog.Exception.SpecifyAFileToUse

Error message

XBaseInputDialog.Exception.SpecifyAFileToUse

What it means

Kettle's XBase input dialog throws this when the step configuration has no DBF file selected and the step is not configured to accept filenames from an incoming step. getInfo() validates the metadata as the dialog closes (via ok()) or before preview, refusing to save an XBase step that would have nothing to read.

Solutions

  1. Open the XBase Input step dialog and enter a .dbf file path in the File field
  2. Or check 'Accepting filenames in the first step of the transformation' and wire a prior step that supplies filenames
  3. Ensure the accepting-field/step options are consistent with the chosen mode

Example fix

// before (no file set, acceptingFilenames off) -> throws
meta.setAcceptingFilenames(false);
meta.setDbfFileName(null);
// after
meta.setAcceptingFilenames(false);
meta.setDbfFileName("/data/customers.dbf");
// OR: meta.setAcceptingFilenames(true) with a preceding step providing filenames
Defensive patterns

Strategy: validation

Validate before calling

// before opening/saving the step metadata
boolean valid = !Utils.isEmpty(meta.getDbfFileName()) || meta.isAcceptingFilenames();
if (!valid) { throw new KettleStepException("Specify a DBF file or enable accepting filenames"); }

Prevention

When it happens

Trigger: Clicking OK or Preview in the XBase Input dialog while the 'File' field is empty and the 'Accepting filenames' checkbox is unchecked.

Common situations: User creates a new XBase Input step but leaves the dbf filename blank; a copied step lost its filename; automation that fills only some dialog fields.

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

Appendix: source

Thrown at ui/src/main/java/org/pentaho/di/ui/trans/steps/xbaseinput/XBaseInputDialog.java:525

  }

  public void getInfo( XBaseInputMeta meta ) throws KettleStepException {
    // copy info to Meta class (input)
    meta.setDbfFileName( wFilename.getText() );
    meta.setRowLimit( Const.toInt( wLimit.getText(), 0 ) );
    meta.setRowNrAdded( wAddRownr.getSelection() );
    meta.setRowNrField( wFieldRownr.getText() );

    meta.setIncludeFilename( wInclFilename.getSelection() );
    meta.setFilenameField( wInclFilenameField.getText() );

    meta.setAcceptingFilenames( wAccFilenames.getSelection() );
    meta.setAcceptingField( wAccField.getText() );
    meta.setAcceptingStep( transMeta.findStep( wAccStep.getText() ) );
    meta.setCharactersetName( wCharactersetName.getText() );

    if ( Utils.isEmpty( meta.getDbfFileName() ) && !meta.isAcceptingFilenames() ) {
      throw new KettleStepException( BaseMessages.getString( PKG, "XBaseInputDialog.Exception.SpecifyAFileToUse" ) );
    }
  }

  private void ok() {
    if ( Utils.isEmpty( wStepname.getText() ) ) {
      return;
    }

    try {
      stepname = wStepname.getText(); // return value
      getInfo( input );
    } catch ( KettleStepException e ) {
      MessageBox mb = new MessageBox( shell, SWT.OK | SWT.ICON_ERROR );
      mb.setMessage( e.toString() );
      mb.setText( BaseMessages.getString( PKG, "System.Warning" ) );
      mb.open();
    }
    dispose();

View on GitHub (pinned to f3058517a1)