pentaho/pentaho-kettle · error · KettleException

PGPDecryptStream.Error.DataToDecryptEmpty

Error message

PGPDecryptStream.Error.DataToDecryptEmpty

What it means

Message key PGPDecryptStream.Error.DataToDecryptEmpty thrown in processRow: the string read from the stream field as the data to decrypt is null/empty, so there is nothing to feed the PGP decryption routine.

Solutions

  1. Filter or handle rows whose encrypted-data field is empty before this step
  2. Verify the upstream field name and that it actually contains ciphertext
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at engine/src/main/java/org/pentaho/di/trans/steps/pgpdecryptstream/PGPDecryptStream.java:129 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/d0259094ae619c8d. Report an issue: GitHub.

Appendix: source

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

      // allocate output row
      Object[] outputRow = RowDataUtil.allocateRowData( data.outputRowMeta.size() );
      for ( int i = 0; i < data.NrPrevFields; i++ ) {
        outputRow[i] = r[i];
      }

      if ( meta.isPassphraseFromField() ) {
        data.passPhrase = data.previousRowMeta.getString( r, data.indexOfPassphraseField );
        if ( Utils.isEmpty( data.passPhrase ) ) {
          throw new KettleException( BaseMessages.getString( PKG, "PGPDecryptStream.Error.PassphraseMissing" ) );
        }
      }
      // get stream, data to decrypt
      String encryptedData = data.previousRowMeta.getString( r, data.indexOfField );

      if ( Utils.isEmpty( encryptedData ) ) {
        // no data..we can not continue with this row
        throw new KettleException( BaseMessages.getString( PKG, "PGPDecryptStream.Error.DataToDecryptEmpty" ) );
      }

      // let's decrypt data
      String decryptedData = data.gpg.decrypt( encryptedData, data.passPhrase );

      // Add encrypted data to input stream
      outputRow[data.NrPrevFields] = decryptedData;

      // add new values to the row.
      putRow( data.outputRowMeta, outputRow ); // copy row to output rowset(s);

      if ( log.isRowLevel() ) {
        logRowlevel( BaseMessages.getString( PKG, "PGPDecryptStream.LineNumber", getLinesRead()
          + " : " + getInputRowMeta().getString( r ) ) );
      }
    } catch ( Exception e ) {
      if ( getStepMeta().isDoingErrorHandling() ) {
        sendToErrorRow = true;

View on GitHub (pinned to f3058517a1)