pentaho/pentaho-kettle · error · KettleException

PGPDecryptStream.Exception.CouldnotFindField

Error message

PGPDecryptStream.Exception.CouldnotFindField

What it means

Message key PGPDecryptStream.Exception.CouldnotFindField thrown in processRow: the configured passphrase field name cannot be resolved in the previous row metadata (indexOfPassphraseField < 0), so the passphrase is unreachable for this row.

Solutions

  1. Set the passphrase field to a field actually present in the incoming stream
  2. Rename or add the field upstream so it reaches this step
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at engine/src/main/java/org/pentaho/di/trans/steps/pgpdecryptstream/PGPDecryptStream.java:89 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/pgpdecryptstream/PGPDecryptStream.java:89

        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, "PGPDecryptStream.Error.DataStreamFieldMissing" ) );
        }

        if ( meta.isPassphraseFromField() ) {
          // Passphrase from field
          String fieldname = meta.getPassphraseFieldName();
          if ( Utils.isEmpty( fieldname ) ) {
            throw new KettleException( BaseMessages.getString(
              PKG, "PGPDecryptStream.Error.PassphraseFieldMissing" ) );
          }
          data.indexOfPassphraseField = data.previousRowMeta.indexOfValue( fieldname );
          if ( data.indexOfPassphraseField < 0 ) {
            // The field is unreachable !
            throw new KettleException( BaseMessages.getString(
              PKG, "PGPDecryptStream.Exception.CouldnotFindField", fieldname ) );
          }
        } else {
          // Check is passphrase is provided
          data.passPhrase =
            Encr.decryptPasswordOptionallyEncrypted( environmentSubstitute( meta.getPassphrase() ) );
          if ( Utils.isEmpty( data.passPhrase ) ) {
            throw new KettleException( BaseMessages.getString( PKG, "PGPDecryptStream.Error.PassphraseMissing" ) );
          }
        }

        // cache the position of the field
        if ( data.indexOfField < 0 ) {
          data.indexOfField = data.previousRowMeta.indexOfValue( meta.getStreamField() );
          if ( data.indexOfField < 0 ) {
            // The field is unreachable !
            throw new KettleException( BaseMessages.getString(
              PKG, "PGPDecryptStream.Exception.CouldnotFindField", meta.getStreamField() ) );

View on GitHub (pinned to f3058517a1)