pentaho/pentaho-kettle · error · KettleException

PGPEncryptStream.Error.DataStreamFieldMissing

Error message

PGPEncryptStream.Error.DataStreamFieldMissing

What it means

PGPEncryptStream.processRow throws KettleException when the step's 'stream field' (the field containing the data to encrypt) is not configured. The step cannot know which column to encrypt, so it aborts on the first row.

Solutions

  1. Open the PGP Encrypt Stream step dialog and set the 'Stream field' to the column holding data to encrypt
  2. If building metadata in code, call meta.setStreamField("fieldName") before execution
  3. Validate transformation metadata before running (e.g., in a test that inspects getStreamField())

Example fix

// before
PGPEncryptStreamMeta meta = new PGPEncryptStreamMeta(); // streamField never set
// after
meta.setStreamField( "payload" );
Defensive patterns

Strategy: validation

Validate before calling

// Before running the transformation
PGPEncryptStreamMeta meta = /* ... */;
if (meta.getStreamField() == null || meta.getStreamField().trim().isEmpty()) {
  throw new IllegalStateException("PGP Encrypt Stream step: Stream field must be set");
}

Try / catch

try { trans.execute(null); }
catch (KettleException e) {
  if (e.getMessage().contains("DataStreamFieldMissing")) {
    log.error("Configure the PGP step's stream field before running", e);
  } else { throw e; }
}

Prevention

When it happens

Trigger: Executing a transformation where the PGP Encrypt Stream step has an empty StreamField setting; check runs once on first row via Utils.isEmpty(meta.getStreamField()).

Common situations: Step created programmatically or via a template that never set the field name, field cleared in the dialog, transformation migrated from another tool.

Understand the failure class

Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/pgpencryptstream/PGPEncryptStream.java:75

    if ( r == null ) { // no more input to be expected...

      setOutputDone();
      return false;
    }

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

        // Check is stream data field is provided
        if ( Utils.isEmpty( meta.getStreamField() ) ) {
          throw new KettleException( BaseMessages.getString( PKG, "PGPEncryptStream.Error.DataStreamFieldMissing" ) );
        }

        if ( meta.isKeynameInField() ) {
          // keyname will be extracted from a field
          String keyField = meta.getKeynameFieldName();
          if ( Utils.isEmpty( keyField ) ) {
            throw new KettleException( BaseMessages.getString( PKG, "PGPEncryptStream.Error.KeyNameFieldMissing" ) );
          }
          data.indexOfKeyName = data.previousRowMeta.indexOfValue( keyField );
          if ( data.indexOfKeyName < 0 ) {
            // The field is unreachable !
            throw new KettleException( BaseMessages.getString(
              PKG, "PGPEncryptStream.Exception.CouldnotFindField", meta.getStreamField() ) );
          }
        } else {
          // Check is keyname is provided
          data.keyName = environmentSubstitute( meta.getKeyName() );

View on GitHub (pinned to f3058517a1)