pentaho/pentaho-kettle · error · KettleException

MailValidator.Error.ResultFieldNameMissing

Error message

MailValidator.Error.ResultFieldNameMissing

What it means

MailValidator.processRow() throws this KettleException during step initialization when the configured result field name is empty. Every Mail Validator step must write its boolean/string result into a named output field; without one the step cannot build its output row metadata.

Solutions

  1. Open the Mail Validator step dialog and set the 'result fieldname' (e.g. 'isValidEmail').
  2. If using a variable for the field name, ensure it is defined (via kettle.properties, parameters, or Set Variables).
  3. Validate meta.getResultFieldName() before executing the transformation programmatically.
  4. Set the field name in code: meta.setResultFieldName("isValidEmail").

Example fix

// before
meta.setResultFieldName( null );
// after
meta.setResultFieldName( "isValidEmail" );
Defensive patterns

Strategy: validation

Validate before calling

// Before executing the transformation
if ( meta.getResultFieldName() == null || environmentSubstitute( meta.getResultFieldName() ).isEmpty() ) {
  throw new IllegalArgumentException( "Mail Validator result fieldname must be set" );
}

Try / catch

try {
  trans.execute( null );
} catch ( KettleException e ) {
  if ( e.getMessage().contains( "ResultFieldNameMissing" ) ) {
    logError( "Set the result fieldname on the Mail Validator step" );
  }
  throw e;
}

Prevention

When it happens

Trigger: Running the transformation with a Mail Validator step whose 'result fieldname' setting is blank (or resolves to empty after variable substitution).

Common situations: Step copied from another transformation with the field cleared; a variable used for the field name is undefined at runtime; step configured programmatically without calling setResultFieldName().

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

Appendix: source

Thrown at plugins/mail-validator/impl/src/main/java/org/pentaho/di/trans/steps/mailvalidator/MailValidator.java:73

      setOutputDone();
      return false;
    }

    if ( first ) {
      first = false;

      // get the RowMeta
      data.previousRowMeta = getInputRowMeta().clone();
      data.NrPrevFields = data.previousRowMeta.size();
      data.outputRowMeta = getInputRowMeta().clone();
      meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,
        metaStore );

      // check result fieldname
      data.realResultFieldName = environmentSubstitute( meta.getResultFieldName() );
      if ( Utils.isEmpty( data.realResultFieldName ) ) {
        throw new KettleException( BaseMessages.getString( PKG, "MailValidator.Error.ResultFieldNameMissing" ) );
      }

      if ( meta.isResultAsString() ) {
        if ( Utils.isEmpty( meta.getEMailValideMsg() ) ) {
          throw new KettleException( BaseMessages.getString( PKG, "MailValidator.Error.EMailValidMsgMissing" ) );
        }

        if ( Utils.isEmpty( meta.getEMailNotValideMsg() ) ) {
          throw new KettleException( BaseMessages.getString( PKG, "MailValidator.Error.EMailNotValidMsgMissing" ) );
        }

        data.msgValidMail = environmentSubstitute( meta.getEMailValideMsg() );
        data.msgNotValidMail = environmentSubstitute( meta.getEMailNotValideMsg() );
      }

      // Check is email address field is provided
      if ( Utils.isEmpty( meta.getEmailField() ) ) {
        throw new KettleException( BaseMessages.getString( PKG, "MailValidator.Error.FilenameFieldMissing" ) );

View on GitHub (pinned to f3058517a1)